更改应用程序权限会导致再次调用 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()。如何处理?
在 Android 中制作 lancher 应用时出现重复的 onCreate 调用问题?