Android动态申请Camera权限应用闪退问题

问题:客户反馈他们应用第一次打开申请相机权限,应用退出,需要第二次打开。
分析:先写一个简单的应用测试下
测试结果:
        应用在申请完相机权限之后确实会被系统杀掉,日志中打了如下日志
        Killing 8269:com.example.android.camera2basic/u0a85 (adj 100): permission grant or revoke changed gids(偷懒往下下载了一个相机的demo)
研究代码发现如下的逻辑:

            final int result = permissionsState.grantRuntimePermission(bp, userId);
            switch (result) {
                case PermissionsState.PERMISSION_OPERATION_FAILURE: {
                    return;
                }

                case PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED: {
                    final int appId = UserHandle.getAppId(pkg.applicationInfo.uid);
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            killUid(appId, userId, KILL_APP_REASON_GIDS_CHANGED);
                        }
                    });
                }
                break;

        PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED是个什么东西?

        这个flag表示权限授予成功,但是应用的gids改变了,那么就好理解了,因为申请了camera的权限,所以应用的gids改变了,系统认为gids变了就要杀掉应用(系统还有类似的逻辑,比如清除app数据也会导致应用被杀)
我们去frameworks/base/data/etc/platform.xm中看看
           
               
           

        原来申请了CAMERA的权限之后就会把该应用加入camera组
        再看看其他的权限
           
           
        读写内部存储是没有引起组变化的
           
               
           

        网络权限也会引起组变化,可是网络权限不用动态申请,所以没有这个问题

你可能感兴趣的:(Android动态申请Camera权限应用闪退问题)