Android 6.0 WRITE_SETTINGS权限问题

   最近写项目的时候遇到了这个问题,环信给出的demo里面的targetSdkVersion 是22,但是现在项目一般都需要适配6.0的了,所有在初始化互动云的时候 会报:
      java.lang.SecurityException: com.nei.neiquan.huawuyuan was not granted  either of these permissions: android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS.
  查了一下资料得出这牵涉到Android 6.0的bug,android 6.0的 :
    ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_SETTINGS) != PackageManager.PERMISSION_GRANTED)  不管设置里面有没有允许,这个方法的值都是false,所有这个权限是否有 不能根据这个方法来判断了,找了个替代方法Settings.System.canWrite(context),用这个方法能得到真实的数据,但是这个方法也有一定的局限性,就是得触发下才能有效,返回正确的数据,不然一直是false,就是不管手机系统WRITE_SETTINGS这个权限是否允许,都得按下,如果是允许的,得先按下取消再先允许才能触发onActivityResult,这个里面的Settings.System.canWrite(WelcomeActivity.this)能返回true。所以,我存一个数据在数据库,当进入到主界面的时候就修改这个值,就代表该App已经有这个权限,下次杀死进程进来直接初始化。
     在onActivityResult里面判断然后初始化环信 ,具体代码如下:
@RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("tag", "requestCode==" + requestCode + "resultCode==" + resultCode);
        if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
            if (Settings.System.canWrite(WelcomeActivity.this)) {
                MyApplication.spUtil.put(UserConstant.ISFIRST2APPpp, "3");
                DemoHelper.getInstance().init(this);
                settingContent();
            }
        }
    }
  问题部分解决,特意记录下,共勉。

猜你喜欢

转载自blog.csdn.net/chengxiuhong1/article/details/78805574
今日推荐