Android 10如何读取设备信息?

问题描述 投票:0回答:2

我正在尝试使用 TelephonyManager 读取设备信息,例如 Build.SERIAL 和 DeviceId。在 Android 9 及更低版本中,我能够毫无问题地访问所有这些信息。

当我尝试读取 Android 10

中的设备信息时,我收到以下异常

GetDeviceId:用户10727不符合获取设备标识的条件。

此信息对于我的应用程序的安全非常重要。我需要通过不可更改的设备标识来识别设备的方法。

android android-security android-10.0 device-instance-id
2个回答
0
投票

如此处所述,这是 Android 10 中引入的更改之一: https://developer.android.com/about/versions/10/highlights

您应该尝试使用此处的最佳实践之一: https://developer.android.com/training/articles/user-data-ids

无论如何,根据我的经验,如果您在应用程序中获得 UUID,即使卸载并重新安装您的应用程序,您也会获得相同的 uuid。请注意,此 uuid 不是较新 Android 设备上的实际设备 uuid。但是,如果您将其存储在服务器上,它可以用于检测卸载和重新安装。

Settings.Secure.getString(App.instance.getContentResolver(), Settings.Secure.ANDROID_ID);

0
投票

要访问设备标识符,您需要在应用的 AndroidManifest.xml 文件中请求相关权限。

例如,要访问设备的 IMEI,您需要将 READ_PHONE_STATE 权限添加到清单中。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

如果您的应用出于安全目的需要设备标识符,并且由于用户拒绝权限而无法访问 IMEI 或其他敏感信息,则您可能需要考虑设备识别的替代方法,例如为您的设备生成唯一标识符不与设备本身绑定的应用程序。

请记住,隐私是现代 Android 开发的重中之重,尊重用户的选择和隐私设置非常重要。始终优雅地处理权限请求和拒绝的权限,并确保您的应用程序正常运行,即使未授予某些权限也是如此。

// Check if the READ_PHONE_STATE permission is granted
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
    // Permission is granted, you can retrieve the MEID

    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    String meid = telephonyManager.getMeid();

    // Use the MEID as needed
} else {
    // Permission is not granted, request it from the user
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_REQUEST_CODE);
}

© www.soinside.com 2019 - 2024. All rights reserved.