android权限申请完成后app闪退,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组

再看看其他的权限

读写内部存储是没有引起组变化的

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值