这段代码在我的手机上运行。但它没有在我的朋友手机上工作。我也有许可。我收到此错误;
用户10109和当前进程都没有android.permission.READ_PHONE_STATE。
许可;
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
这是我的代码;
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
IMEI= telephonyManager.getDeviceId();
答案 0 :(得分:1)
这可能是因为您的朋友在Android 6.0(API级别23)上运行。您需要在运行时添加权限以及Manifest
中的权限。
从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时。此方法简化了应用安装过程,因为用户在安装或更新应用时无需授予权限。它还使用户可以更好地控制应用程序的功能;例如,用户可以选择让相机应用程序访问相机,但不能访问设备位置。用户可以随时转到应用程序的“设置”屏幕来撤消权限。
有关详细信息,请参阅here。也许看看this question以了解如何实现运行时权限,尽管它也在第一个链接中进行了解释。
答案 1 :(得分:1)
根据新的marshmallow操作系统,您需要为“READ_SMS”配置运行时权限
像这样:String permission = Manifest.permission.READ_SMS;
if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED){
permissionList.add(permission);
if (!ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), permission)){
requestPermissions(new String[]{permission}), SMS_PERMISSION);
}
}