今天客户反馈了一个很奇怪的现象:Android 6.0 (TargetSDk >= 23)接口应用调用定位功能时,选择“仅限这一次”调用成功后,再次调用无提示调用成功 本地进行测试后,发现确实是这么回事,但是app退出一段时间后,又会进行权限申请调用,这个现象就很奇怪了。
特此记录一下: android 版本是11
通过抓取systemServer的日志,我们定位到frameworks/base/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java 这个类,其中
private static final long DEFAULT_KILLED_DELAY_MILLIS = 1000;就是用来控制是否重新申请权限的时间的参数
具体的调用说明在下面:
/**
* The delay to wait before revoking on the event an app is terminated. Recommended to be long
* enough so that apps don't lose permission on an immediate restart
*/
private static long getKilledDelayMillis() {
return DeviceConfig.getLong(DeviceConfig.NAMESPACE_PERMISSIONS,
PROPERTY_KILLED_DELAY_CONFIG_KEY, DEFAULT_KILLED_DELAY_MILLIS);
}