更改应用程序权限会导致再次调用 oncreate()

Posted

技术标签:

【中文标题】更改应用程序权限会导致再次调用 oncreate()【英文标题】:Changing application permission causes the oncreate() called again 【发布时间】:2017-05-19 12:45:48 【问题描述】:

我正在处理运行时权限。当我在我的活动课程中创建包含图像的报告时,更改权限时应用程序崩溃并且我丢失了数据。我使用了OnsaveInstance,但它并没有达到我真正想要的效果。当有人从设置更改应用程序权限并保存我的报告时,我想重新启动我的应用程序。

权限改变时调用Activity的哪个方法?

我怎么知道权限是从后台更改的?

【问题讨论】:

【参考方案1】:

您可以在活动启动或恢复中检查权限,例如 this answer

对于重新启动应用程序,您可以尝试来自此 Q/ans thread 的任何答案,这是此处重新启动活动的公认答案之一

Intent i = getBaseContext().getPackageManager()
             .getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

【讨论】:

【参考方案2】:

我怎么知道权限是从后台更改的?

如果用户从“设置”中删除了之前授予的权限,您的进程将立即终止。您会发现权限在您的应用下一次运行时发生了变化。

如果用户从“设置”中授予了用户之前未授予的权限,则您的进程将被单独保留,但您也不会被告知新权限。欢迎您在适当的时候致电checkSelfPermission(),看看您现在是否拥有以前缺乏的权限。

【讨论】:

【参考方案3】:

要检查您当前是否拥有使用ContextCompat.checkSelfPermission() 的权限,请参阅the developer docs 了解详情。

如果您需要后台线程中的权限,则在执行工作之前检查您是否拥有权限。如果您没有权限,您将不得不跳过该工作,如果您只是继续,那么您的代码很可能会抛出 SecurityException

当您没有所需权限时如何处理取决于用例。您可以创建一个系统通知,通知用户由于缺少权限而无法执行后台任务。如果用户点击通知,那么您可以在重试任务之前请求用户的许可。有关如何向用户请求权限,请参阅相同的开发者文档。

如果可以中止后台任务,那么您可以这样做,但您可能希望在用户界面的某处显示后台任务需要缺少的权限,并要求用户授予它,以便(可选)后台任务可以完成它的工作。

【讨论】:

以上是关于更改应用程序权限会导致再次调用 oncreate()的主要内容,如果未能解决你的问题,请参考以下文章

分组推送通知再次调用 MainActivity 的 OnCreate()。如何处理?

仅在 firebase 调用完成时加载布局

在 Android 中制作 lancher 应用时出现重复的 onCreate 调用问题?

再次迁移特定表 laravel

为啥备份相关过程可能会导致应用程序的 onCreate 未执行?

是否可以检查是否由于方向更改而调用了 onCreate?