Android Q中的唯一标识符

时间:2019-06-24 06:19:47

标签: android

Android Q已限制访问IMEI和序列号。它仅适用于具有特殊运营商许可的平台和应用。此外,权限READ_PRIVILEGED_PHONE_STATE不适用于非平台应用程序。

现有版本(Android P,Android O,Android M)我们使用序列号唯一标识了该设备。现在,我们在尝试访问设备标识符时遇到了以下异常。

Android Q已限制访问IMEI和序列号。

android.os.Build类中的

getSerial()

06-21 12:37:07.460  1250  2555 W DevicePolicyManager: Package com.nagra.nmp.corepaktest (uid=10201, pid=32694) cannot access Device IDs
06-21 12:37:07.460  1250  2555 W TelephonyPermissions: reportAccessDeniedToReadIdentifiers:com.nagra.nmp.corepaktest:getSerial:isPreinstalled=false:isPrivApp=false
06-21 12:37:07.464 32694 32718 W System.err: java.lang.SecurityException: getSerial: The user 10201 does not meet the requirements to access device identifiers.
06-21 12:37:07.464 32694 32718 W System.err:    at android.os.Parcel.createException(Parcel.java:2069)
06-21 12:37:07.464 32694 32718 W System.err:    at android.os.Parcel.readException(Parcel.java:2037)
06-21 12:37:07.465 32694 32718 W System.err:    at android.os.Parcel.readException(Parcel.java:1986)
06-21 12:37:07.465 32694 32718 W System.err:    at android.os.IDeviceIdentifiersPolicyService$Stub$Proxy.getSerialForPackage(IDeviceIdentifiersPolicyService.java:159)
06-21 12:37:07.465 32694 32718 W System.err:    at android.os.Build.getSerial(Build.java:149)
06-21 12:37:07.465 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestBridge.start(Native Method)
06-21 12:37:07.466 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestWrapper.start(TestWrapper.java:111)
06-21 12:37:07.466 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestWrapper.access$200(TestWrapper.java:58)
06-21 12:37:07.466 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestWrapper$WrapperThread.run(TestWrapper.java:427)
android.telephony.TelephonyManager类中的

getDeviceId()

06-21 12:37:07.472  1250  2555 W DevicePolicyManager: Package com.nagra.nmp.corepaktest (uid=10201, pid=32694) cannot access Device IDs
06-21 12:37:07.472  2744  2764 W TelephonyPermissions: reportAccessDeniedToReadIdentifiers:com.nagra.nmp.corepaktest:getDeviceId:isPreinstalled=false:isPrivApp=false
06-21 12:37:07.473 32694 32718 W System.err: java.lang.SecurityException: getDeviceId: The user 10201 does not meet the requirements to access device identifiers.
06-21 12:37:07.474 32694 32718 W System.err:    at android.os.Parcel.createException(Parcel.java:2069)
06-21 12:37:07.474 32694 32718 W System.err:    at android.os.Parcel.readException(Parcel.java:2037)
06-21 12:37:07.474 32694 32718 W System.err:    at android.os.Parcel.readException(Parcel.java:1986)
06-21 12:37:07.474 32694 32718 W System.err:    at com.android.internal.telephony.ITelephony$Stub$Proxy.getDeviceId(ITelephony.java:10278)
06-21 12:37:07.474 32694 32718 W System.err:    at android.telephony.TelephonyManager.getDeviceId(TelephonyManager.java:1565)
06-21 12:37:07.474 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestBridge.start(Native Method)
06-21 12:37:07.474 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestWrapper.start(TestWrapper.java:111)
06-21 12:37:07.474 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestWrapper.access$200(TestWrapper.java:58)
06-21 12:37:07.474 32694 32718 W System.err:    at com.nagra.CppUnitForAndroid.TestWrapper$WrapperThread.run(TestWrapper.java:427)

哪个(属性/ API)用于唯一标识设备?

2 个答案:

答案 0 :(得分:2)

只有系统应用程序可以访问硬件ID。 如果您的应用需要标识在不同设备上运行的应用的唯一实例,则应使用Firebase InstanceID服务之类的API,但不同的提供商也可以提供类似的选项。

值得注意的是,即使在较旧的Android版本中,Google也不鼓励使用硬件ID功能。

答案 1 :(得分:0)

由于硬件ID受到限制,因此您可以使用几乎可靠的软件ID,例如ANDROID_ID

Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)

我之所以使用,几乎是因为它可以在有根电话上更改,但在无根设备上可靠。