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

Java 更改应用程序权限会导致再次调用oncreate(),java,android,user-permissions,Java,Android,User Permissions,我正在处理运行时权限。当我在活动类中创建包含图像的报告时,当权限更改时,应用程序崩溃,我的数据丢失。我使用了存储实例上的OnsaveInstance,但它并不是我真正想要的。当有人从设置更改应用权限并保存我的报告时,我想重新启动我的应用 权限更改时调用活动的哪个方法 我如何知道权限已从后台更改 您可以在活动启动或恢复中检查权限,如 对于重新启动应用程序,您可以尝试此Q/ans中的任何答案,这是重新启动活动的公认答案之一 Intent i = getBaseContext().getPacka

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

  • 权限更改时调用活动的哪个方法

  • 我如何知道权限已从后台更改


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

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

Intent i = getBaseContext().getPackageManager()
             .getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
我如何知道权限已从后台更改

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


如果用户从“设置”中授予了用户以前未授予的权限,则您的进程将不受影响,但您也不会被告知新权限。欢迎您在适当的时候调用
checkSelfPermission()
,查看您现在是否拥有以前缺少的权限。

要检查您当前是否拥有使用的权限
ContextCompat.checkSelfPermission()
,请参阅以了解详细信息

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

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

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