动态申请权限允许后fragment崩溃

来源:互联网 发布:平面设计网络课程 编辑:程序博客网 时间:2024/05/19 15:39

前言

前几天做一个小程序,基于Android O,miniSDK版本是Android 5.0
一开始用的Android O的虚拟机和7.1.2的一加3测试没问题
但是发布之后,小伙伴说Android M(6.0) 不给权限死,给了权限反而闪退(我程序启动先加载一个Fragment,而这个fragment需要权限,所以我就设定给了权限加载,不给权限停在一个空白页面啥都不做,所以导致不给权限没啥事,给了权限反而崩溃)

后来发现这是因为在Android M中,给定权限使用以下代码:

if(ContextCompat.checkSelfPermission(this,                Manifest.permission.WRITE_CALENDAR) ==PackageManager.PERMISSION_DENIED){            ActivityCompat.requestPermissions(this,                    new String[]{Manifest.permission.READ_PHONE_STATE},res);        }

权限请求操作之后去下面代码处理:

 @Override    public void onRequestPermissionsResult(int requestCode,                                           @NonNull String permissions[], @NonNull int[] grantResults) {        switch (requestCode) {            case 0: {                // If request is cancelled, the result arrays are empty.                if (grantResults.length > 0                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                    Log.e("JHH","daozhele");                    device_fragment = new Device_Fragment(this);                    fragmentTransaction.add(R.id.fragment_main,device_fragment);                    old_fragment = device_fragment;                    fragmentTransaction.commit();                }            }        }    }

后来发现fragment加载提交报错,原因是状态丢失:
把commit代码改成下面的就好了
fragmentTransaction.commitAllowingStateLoss();

原创粉丝点击