requestPermission:如何等待直到被授予?

Don*_*nic 3 android android-permissions

Android API 23 及更高版本要求在运行时确认“危险”权限。根据其他 StackOverflow 建议,我使用 checkSelfPermissions() 检查所需的权限,如果需要,调用 requestPermissions()。这工作正常,但请求是异步处理的,即 requestPermissions() 立即返回。问题是我的应用程序在 requestPermissions() 之后继续运行。稍后,权限确认对话框出现,但到那时,我的应用程序尝试了失败的 API 调用。

我假设我需要等到所有权限都被授予才能继续我的应用程序。我想我可以实现一些民意调查来做到这一点,但这对我来说太粗糙了。解决这个问题的“最佳实践”是什么?文档中的各种最佳实践描述都没有解决这个问题。

The*_*rer 7

将您的逻辑放在它自己的函数中,在onCreate().

private void doStuff() {
    //whatever
}
Run Code Online (Sandbox Code Playgroud)

如果授予权限,只需直接从onCreate()以下调用该函数:

@Override
public void onCreate(Bundle savedInstanceState) {
    //...
    if (checkSelfPermissions(/*whatever*/) {
        doStuff();
    } else {
        requestPermissions(/*whatever*/);
    }

    //nothing dependent on runtime permissions after this point
}
Run Code Online (Sandbox Code Playgroud)

然后覆盖onRequestPermissionsResult()

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == /*whatever you set in requestPermissions()*/) {
        if (!Arrays.asList(grantResults).contains(PackageManager.PERMISSION_DENIED)) {
            //all permissions have been granted
            doStuff(); //call your dependent logic
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Filip,理想情况下,您应该在收集任何数据或设置任何状态之前请求权限。如果这不起作用,您将不得不使用成员变量来存储数据并在方法中使用它。 (2认同)