权限弹窗“仅本次使用时允许”时效问题

测试发现应用申请位置权限,选择“仅本次使用时允许”后,am force-stop杀掉应用后再次启动应用,权限仍然是granted授权成功状态,分析aosp源码发现是有个延迟撤销授权机制:

关键源码位置

frameworks/base/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java

应用进程被杀后,默认要5000ms后才会撤回onetime授权状态(通过config可以修改这个long值)

流程:

android.permission.PermissionManager#startOneTimePermissionSession(java.lang.String, long, long, int, int)调用revokeAfterKilledDelayMillis值传的-1,通过PMS中转最终走到OneTimePermissionUserManager:

com.android.server.pm.permission.OneTimePermissionUserManager#startPackageOneTimeSession(@NonNull String packageName, int deviceId, long timeoutMillis,
            long revokeAfterKilledDelayMillis)

内部new或者update PackageInactivityListener的参数,最终取值为DEFAULT_KILLED_DELAY_MILLIS = 5000

(基于Android16源码分析)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值