代码之家  ›  专栏  ›  技术社区  ›  DontPanic

requestPermission:如何等待授权?

  •  0
  • DontPanic  · 技术社区  · 7 年前

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

    文档中的各种最佳实践描述都没有解决这个问题。

    1 回复  |  直到 7 年前
        1
  •  7
  •   Mykola Khyliuk    5 年前

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

    private void doStuff() {
        //whatever
    }
    

    onCreate()

    @Override
    public void onCreate(Bundle savedInstanceState) {
        //...
        if (checkSelfPermissions(/*whatever*/) {
            doStuff();
        } else {
            requestPermissions(/*whatever*/);
        }
    
        //nothing dependent on runtime permissions after this point
    }
    

    然后重写 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
            }
        }
    }