问题描述
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();
}
我已经在清单中也声明了对READ_PHONE_STATE的许可。但是getSubscriberId()引发错误,提示“用户10171不符合访问设备标识符的要求。”我需要SubscriberId来跟踪移动网络数据使用情况。清单中没有READ_PRIVILEGED_PHONE_STATE权限,这是networkstatsmanager.queryDetailsForUid的唯一使用方法。 有人可以帮助解决这个问题吗,谢谢!!
解决方法
出于安全目的,Android限制了TelephonyManager类的使用。
从Android 10(API级别29)开始,您无法使用TelephonyManager类获取任何信息以获取更多详细信息,请阅读以下链接中的所有信息
https://developer.android.com/training/articles/user-data-ids#java
,Android 10(API级别29)为不可重置的标识符(包括IMEI和序列号)增加了限制。您的应用必须是设备或个人资料所有者应用,具有特殊的运营商权限,或具有READ_PRIVILEGED_PHONE_STATE特权,才能访问这些标识符。
您可以通过此链接查看是否有什么可以帮助您-https://developer.android.com/training/articles/user-data-ids