Java TelephonyManager.getSubscriberId的权限读取\特权\电话\状态不可用,

Java TelephonyManager.getSubscriberId的权限读取\特权\电话\状态不可用,,java,android,android-layout,android-permissions,telephonymanager,Java,Android,Android Layout,Android Permissions,Telephonymanager,我已经在舱单中声明允许阅读电话状态。但是getSubscriberId()抛出错误,表示“用户10171不符合访问设备标识符的要求。”我需要subscriberId来跟踪移动网络数据的使用情况。权限读取\特权\电话\状态在清单中不可用,这是NetworkStatsManager.QueryDetailsFruid使用的唯一方法。 请有人帮忙解决这个问题,提前谢谢 出于安全目的,Android限制了TelephonyManager类的使用 从Android 10(API级别29)中,您无法使用Te

我已经在舱单中声明允许阅读电话状态。但是getSubscriberId()抛出错误,表示“用户10171不符合访问设备标识符的要求。”我需要subscriberId来跟踪移动网络数据的使用情况。权限读取\特权\电话\状态在清单中不可用,这是NetworkStatsManager.QueryDetailsFruid使用的唯一方法。
请有人帮忙解决这个问题,提前谢谢

出于安全目的,Android限制了TelephonyManager类的使用

从Android 10(API级别29)中,您无法使用TelephonyManager类获得任何信息。有关更多详细信息,请阅读下面链接中的所有信息

Android 10(API级别29)增加了对不可重置标识符的限制,包括IMEI和序列号。您的应用程序必须是设备或配置文件所有者应用程序,具有特殊的运营商权限,或具有读取权限\手机权限\状态权限,才能访问这些标识符

您可以通过此链接查看是否有什么可以帮助您-

if (ActivityCompat.checkSelfPermission(this.getApplicationContext(), Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED){
        ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_PHONE_STATE}, CALL_REQUEST_CODE);
    }



public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == CALL_REQUEST_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
            subscriberId = telephonyManager.getSubscriberId();
        }