为什么“不推荐使用getString()来获取设备标识符?

时间:2017-12-07 09:06:57

标签: java android

我正在尝试将设备ID提供给Logcat,但Android Studio正在向我发出此警告。

  

建议不要使用getstring来获取设备标识符

String deviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(),
        Settings.Secure.ANDROID_ID);

为什么不推荐?

2 个答案:

答案 0 :(得分:18)

完整警告说:

  

不建议使用其他设备标识符   而不是高价值的欺诈预防和先进的电话用例。   对于广告用例,请使用AdvertisingIdClient $ Info#getId和for   分析,使用InstanceId#getId。

     

更多信息:   https://developer.android.com/training/articles/user-data-ids.html

我认为Android不建议使用此值,因为它是一个永久的唯一ID,可用于跟踪您的用户,并且他或她无法更改此ID或阻止您阅读它。警告中给出的其他选项尊重用户的意愿。这就是为什么Android建议你使用它。

这实际上取决于你将如何处理这个id。如今,隐私是一件敏感的事情。

同时检查:

  

...您必须遵守用户'选择退出基于兴趣的广告'   或“选择退出广告个性化”设置。如果用户已启用   此设置,您不能使用广告标识符进行创建   用户个人资料用于广告目的或用于定位用户   个性化广告。允许的活动包括上下文   广告,频次上限,转化跟踪,报告和   安全和欺诈检测。

来源:https://developer.android.com/training/articles/user-data-ids.html

答案 1 :(得分:-3)

正如Giovanni所说,将您的代码更改为:

php -f Path/To/File/cron.php >/dev/null 2>&1

或:

String deviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(),
        InstanceID.getInstance(getApplicationContext()).getId());

如果在中国大陆发布此应用,请勿使用以上方法,可能导致NullPointException,因为大部分设备都没有谷歌服务,无法获取此ID。 请使用

String deviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(),
     AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext()).getId());

然后加上lint屏蔽

android.provider.Settings.Secure.ANDROID_ID

英文: 如果您的应用在中国发布,上述方法可能会导致NullPointException。因为中国的大多数设备都没有Google服务。 试试这个:

@SuppressLint("HardwareIds")

并添加一个suppressLint:

android.provider.Settings.Secure.ANDROID_ID