如何在 Android M 或更高版本中在运行时更改权限时防止重新创建 Activity

Posted

技术标签:

【中文标题】如何在 Android M 或更高版本中在运行时更改权限时防止重新创建 Activity【英文标题】:How to prevent Re-creating an Activity while changing the permissions at runtime in Android M or above 【发布时间】:2017-03-07 13:03:19 【问题描述】:

我的应用使用位置权限。如果此权限在运行时从 App Settings 撤销并返回到应用程序,则当前活动将被销毁并重新创建。如何防止该活动的重新创建?

【问题讨论】:

【参考方案1】:

你不能。如果用户撤销您应用的权限,android 将终止您的进程。这会迫使您返回检查权限代码,您会发现您丢失了权限。

由于您的应用程序的进程可以在您的 UI 不在前台时随时终止,因此您的应用程序应该已经能够处理这种情况。如果它不能,那么您需要修复它,因为您的进程将在后台时因其他原因而终止(操作系统释放系统 RAM,用户使用任务杀手应用程序,用户在设置中按下强制停止等。 )。

【讨论】:

太棒了,不知道这种行为。谢谢!【参考方案2】:

这是在 android 中实现的直接清理机制,用于处理 android M 中的权限更改。 该进程将终止并上线,init's 本身具有可用权限。

因此,您的查询的答案 -> 在整个过程重新启动时,您无法阻止重新创建您的活动。如果您仍然希望检测到此类事件,则最多可以在撤销权限之前保留一些标志,并在您的应用程序进入前台后检查它。

【讨论】:

以上是关于如何在 Android M 或更高版本中在运行时更改权限时防止重新创建 Activity的主要内容,如果未能解决你的问题,请参考以下文章

如何查看我的 Xamarin.Forms 应用程序是不是在 Visual Studio 中的 Android 6(或更高版本)上运行或/和可运行?

如何在 android 10 或更高版本中获取设备 ID 或 imei 号码

Android N 要求 IDE 运行 Java 1.8 或更高版本?

如何在 api 17 或更高版本中使 android seekbar 全宽?

如何在android 10或更高版本中获得“总是”位置的许可? (高于 API 29)?

来自 Android OS 8 或更高版本的连续 android 位置背景