Caused by: java.lang.SecurityExc

2018-01-18  本文已影响181人  蘑菇v5

【声明:】本文是作者(蘑菇v5)原创,版权归作者 蘑菇v5所有,侵权必究。本文首发在简书。如若转发,请注明作者和来源地址!未经授权,严禁私自转载!

原因:

使用Android Studio编译项目的时候将app/build.gradle中的 defaultConfig 设置中的targetSdkVersion设置为了23或则大于23的数值, 这样 Android Studio在编译的时候会使用 Android 23 APIAndroid 6.0来编译项目,但是,如果你没有给项目加上动态权限请求的话,你的应用在安装到手机的时候将不会获取任何权限。可以去查看应用的应用信息,其中的Permissions权限列表中所有的权限组都是关闭状态。

解决办法:

如果你需要紧急避免自己的应用继续在Android 6.0的系统上崩溃,可以将app/build.gradle中的targetSdkVersioncompileSdkVersion设置为22或以下版本,这样的话,编译出来的app会在Android 6.0上以兼容模式运行,可以获取需要的权限,但随着Android 6.0的普及,我还是推荐大家尽量给项目加上动态权限时的判断以及逻辑处理。

前提:应用在android6.0和以上的设备中

具体解决流程:

第一步:在清单配置文件中,添加如下权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
第二步:android6.0动态申请权限,在代码中动态添加权限:
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);

        if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE);
        } else {
            //TODO
        }
第二步:处理相关请求的回调方法(实现onRequestPermissionsResult接口 )
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_READ_PHONE_STATE:
            if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                //TODO
            }
            break;

        default:
            break;
    }
}

参考链接:
http://stackoverflow.com/questions/33078003/android-6-0-permission-error
http://stackoverflow.com/questions/32742327/neither-user-10102-nor-current-process-has-android-permission-read-phone-state

上一篇下一篇

猜你喜欢

热点阅读