java.lang.SecurityException: getDeviceId: Neither user 10063 nor current process has android.permission.READ_PHONE_STATE
at android.os.Parcel.readException(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at com.android.internal.telephony.ITelephony$Stub$Proxy.getDeviceId(ITelephony.java:4175 at android.telephony.TelephonyManager.getDeviceId(TelephonyManager.java:706 at com.alibaba.idst.nls.internal.common.DeviceId.getIMEI(DeviceId.java:105) at com.alibaba.idst.nls.internal.common.DeviceId.generateDeviceId(DeviceId.java:56) at com.alibaba.idst.nls.internal.common.DeviceId.getDeviceIdFromSettings(DeviceId.java:43) at com.alibaba.idst.nls.internal.common.DeviceId.getDeviceId(DeviceId.java:34) at com.alibaba.idst.nls.internal.ServiceStatusChecker$1.run(ServiceStatusChecker.java:65)
你在安卓6.0设备上跑了这个程序,并且编译版本大于23,而且这个原因是在6.0中没有给加上动态权限请求,你的应用在安装到手机的时候将不会获取任何权限!!!可以去查看应用的应用信息,其中的 Permissions 权限列表中所有的权限组都是关闭状态。
1.可以将app/build.gradle中的 targetSdkVersion和compileSdkVersion设置为22或以下版本 2.添加动态权限:
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestReadPhonePermission();
}
private void requestReadPhonePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
//在这里面处理需要权限的代码
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_READ_PHONE_STATE);
}
}
权限的结果处理
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_READ_PHONE_STATE:
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
//TODO
}
break;
default:
break;
}
}