【发布时间】:2017-03-10 01:38:31
【问题描述】:
我看到了我最好的问题之一Is there a unique Android device ID?
编辑:
我也需要适用于 Android 10 的解决方案。
我使用以下代码来获取唯一 ID。
public static String getDeviceId(Activity context) {
PermissionsChecker checker = new PermissionsChecker(context);
if (checker.lacksPermissions(Manifest.permission.READ_PHONE_STATE))
PermissionsActivity.startActivityForResult(context, 0, REQUIRED_PERMISSION);
else {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice = tm.getDeviceId();
final String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32));
return deviceUuid.toString();
}
return null;
}
但我在悬停时收到一些警告
tm.getDeviceId();
和
Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
如下:
不建议使用 getString 获取设备标识符。
不建议使用设备标识符,除非是为了高价值 欺诈预防和高级电话用例。用于广告 用例,使用
AdvertisingIdClient$Info#getId,对于分析,使用InstanceId#getId.
有什么解决办法吗?它是有害的还是其他什么?
【问题讨论】:
-
您可以使用 IMEI 号码作为唯一标识符。这只是警告,因为现在黑客根手机并更改设备ID。
-
恢复出厂后会有变化。我不想要那个。
-
不,IMEI无论如何都不会改变。
-
根据我的经验...总是最好生成唯一的服务器密钥,而不是依赖于应用程序(如果您正在使用它)
-
看这里,可能对你有帮助:developer.android.com/training/articles/…
标签: android telephonymanager android-settings android-identifiers