如何检测另一个 Android 设备?

Posted

技术标签:

【中文标题】如何检测另一个 Android 设备?【英文标题】:How to detect another Android device? 【发布时间】:2013-02-06 08:51:45 【问题描述】:

我有一个要求,如果我在一台 android 设备上运行我的应用程序,然后尝试在另一台 Android 设备上运行同一个应用程序,我需要先检查它是否是另一台设备,如果是,那么我应该继续。您能否告诉我是否有任何方法可以实现这一目标?

谢谢。

【问题讨论】:

在共享偏好中添加一个标志。在第一次运行应用程序时设置标志。下次运行检查标志。然后你会知道.. ??? 【参考方案1】:

你可以用这个:

telephonyManager = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getDeviceId();
telephonyManager.getSimSerialNumber();

getDeviceIdgetSimSerialNumber 在每个设备上都是唯一的,因此您可以检查此值

【讨论】:

你要去哪里检查值?我怀疑成功的答案涉及更多内容。 您必须将此值保存在服务器端而不是客户端,因此对于第一个设备,您应该上传此值并与其他设备进行检查..【参考方案2】:

要实现这个问题是这样的:

How can we differentiate, if we are installing app,
first time on 1st device or first time on second device.
so for that we have to use a unique key for app to run 
on each different device.
So that before saving shared pref,
we can validate the unique key for that device. 

现在的问题是用户将如何获得唯一密钥?因此,假设应用程序供应商将为每个设备提供密钥。但为此,应用程序应该有一些算法来验证我们提供的密钥。

但不幸的是,如果供应商提供密钥,用户也可以使用该密钥在另一台设备上安装。

所以最终解决方案是在首次运行应用程序之前必须在某些 Web 服务上注册设备以进行激活。

【讨论】:

'在第一次运行应用程序之前必须在某些 Web 服务上注册设备' 现在这将是神奇的!我担心您的第一个答案更接近(或至少是一种方式)。 (不过,我确实怀疑你脑海中的想法会奏效,只是你以书面形式表达它的方式让它看起来很神奇)【参考方案3】:

在第一次运行时在共享首选项中设置一个标志

SharedPreferences preferences = getSharedPreferences("PREF_NAME", 0);
boolean onlyonce = preferences.getBoolean("FLAG_NAME", false);

if (!onlyonce ) 
   SharedPreferences.Editor editor = preferences.edit();
   editor.putBoolean("FLAG_NAME", true);
   editor.commit();

如果用户重置应用程序,它也会被清除,这是有风险的。这会解决您的问题吗?

【讨论】:

-1 在回答之前没有阅读/理解问题 @paulkayuk 感谢您的评论,为什么您投了反对票。但我已经在我的回答中解释了这样做的风险。还是为什么? 请阅读 OP 问题,它们指的是 2 个不同的设备。共享首选项存在于每台设备上,不会在 2 个或更多设备之间共享。

以上是关于如何检测另一个 Android 设备?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 检测移动设备?

检测 html5 移动设备中的抖动

如何在特定设备上运行命令“ionic run android”?

如何以正确的方式检测 Android 设备?

如何在 Android 设备中检测来电?

如何使用javascript检测android设备中的键盘关闭事件