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

时间:2017-05-19 12:45:49

标签: java android user-permissions

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

  • 权限更改后调用哪个活动方法?

  • 我怎么知道权限已从后台更改?

3 个答案:

答案 0 :(得分:1)

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

并且对于重新启动应用,您可以尝试此Q / ans thread中的任何答案,这是在此处重新启动活动的已接受答案之一

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

答案 1 :(得分:1)

  

我怎么知道权限已从后台更改。?

如果用户从“设置”中删除了用户之前授予的权限,则会立即终止您的进程。您发现下次应用运行时权限已更改。

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

答案 2 :(得分:1)

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

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

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

如果可以中止后台任务,那么你可以做到这一点,但你可能想在你的用户界面中显示后台任务需要一个缺少的权限,并要求用户授予它以便(可选)后台任务可以完成它的工作。