Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 导致取消后台计划作业和警报的一次性权限_Android_Alarmmanager_Android Permissions_Android 11 - Fatal编程技术网

Android 导致取消后台计划作业和警报的一次性权限

Android 导致取消后台计划作业和警报的一次性权限,android,alarmmanager,android-permissions,android-11,Android,Alarmmanager,Android Permissions,Android 11,我们开发了一个安卓SDK,在测试安卓11测试版时,我们发现了一个似乎尚未报告的问题 在安卓11中,位置、麦克风和摄像头权限引入了新的一次性权限。使用此选项,一旦用户离开应用程序,权限就会被撤销(可以找到更多详细信息) 问题是,在应用程序不再位于前台的短时间后(不需要关闭应用程序,只需最小化就足够了),所有未来计划的警报或作业都会被删除,就像应用程序被强制关闭一样。 这仅在具有此权限级别的情况下发生。 拒绝或提供其他级别,按预期保留先前计划的警报或作业。 我们在Beta 3版本中复制了这一点,在一

我们开发了一个安卓SDK,在测试安卓11测试版时,我们发现了一个似乎尚未报告的问题

在安卓11中,位置、麦克风和摄像头权限引入了新的一次性权限。使用此选项,一旦用户离开应用程序,权限就会被撤销(可以找到更多详细信息)

问题是,在应用程序不再位于前台的短时间后(不需要关闭应用程序,只需最小化就足够了),所有未来计划的警报或作业都会被删除,就像应用程序被强制关闭一样。 这仅在具有此权限级别的情况下发生。 拒绝或提供其他级别,按预期保留先前计划的警报或作业。 我们在Beta 3版本中复制了这一点,在一个像素2仿真器中使用RPB3.200720.005版本号。在这里,您可以找到一个复制bug的示例应用程序

此单一活动应用程序计划在接下来的五分钟内发出警报,并在5-6分钟内触发作业。 屏幕上有三个按钮,每个按钮触发相应的权限请求。 JobService和BroadcastReceiver类仅记录它们已被触发。 在执行以下步骤后,可以再现该情况:

  • 无论何时启动应用程序,都可以运行
    adb shell dumpsys alarm | grep com.example.permissions.app
    adb shell dumpsys jobscheduler | grep com.example.permissions.app
    ,以查看警报和作业是否已调度
  • 单击任意按钮并授予一次性权限级别
  • 最小化应用程序(您可以转到主屏幕或打开其他应用程序)
  • 大约一分钟后,运行
    adb shell dumpsys alarm | grep com.example.permissions.app
    adb shell dumpsys jobscheduler | grep com.example.permissions.app
    。警报和作业将不再出现
  • 等待作业和警报的原始计划时间(对系统延迟宽容)将表明它们不会被触发
  • 你们有没有遇到过类似的情况?我们的直觉是,为了撤销一次性权限,应用程序进程正在以某种方式被终止,从而导致这些副作用。
    我们还提交了一个关于的问题,如果谷歌回答了,我们将更新这篇文章。

    问题已经“解决”。问题实际上是Android Studio在关闭应用程序后权限被撤销时调用了强制关闭

    谷歌的实际回应是:

    非常感谢您提出这个问题并提供示例代码 复制它。经过进一步调查,我们发现 这是由于Android Studio与通过 “运行”命令

    具体来说,当Android撤销一个应用的许可时,它就会终止该许可 应用程序的进程。我们发现Android Studio发送了一个强制停止命令 当亚洲开发银行发现其启动的应用程序不再运行时,它会通过亚洲开发银行

    如果应用程序是通过启动器启动的(包括在模拟器中 连接到Android Studio),应用程序不会强制停止,并且 警报和作业均按预期运行


    所以,除了在开发阶段,它不会引起其他问题。有关更多信息,请查看问题中链接的Android问题跟踪器。

    不确定最终版本的Android 11是否会修复此问题,但您可以在此处阅读: