在获得权限的同时举起手来

问题描述 投票:-1回答:1

我有一个名为getPermisions的方法,它使用名为hasPermissions的辅助方法。我在onCreate方法中调用getPermissions(),如下所示。 。 。

getPermissions();
//code here uses these permissions
camera = Camera.open();  //but this code executes async to getPermissions method

getPermissions的代码如下。 。 。

private  boolean hasPermissions(Context context, String... permissions) {
    if (context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}
private void getPermissions()
{
    //before we display setup dialog we must get permissions . . .

            int PERMISSION_ALL = 1;
            String[] PERMISSIONS = {
                    android.Manifest.permission.READ_PHONE_STATE,
                    android.Manifest.permission.ACCESS_FINE_LOCATION,
                    android.Manifest.permission.CAMERA
            };

            if(!hasPermissions(this, PERMISSIONS)){
                ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
            }

}

如果我正在逐步执行代码,但在实际运行应用程序时,getPermissions()代码与主UI线程异步运行,代码运行良好。因此,当我调用getPermissions()时,主线程继续使用我仍然要求的权限运行。

当用户回答所有三个对话框时,我需要保持主线程。怎么做到最好?

android android-permissions ui-thread
1个回答
1
投票

因此,当我调用getPermissions()时,主线程继续使用我仍然要求的权限运行。

好吧,requestPermissions()异步工作,如果这就是你的意思。在封面下,它使用startActivityForResult()来显示系统提供的权限对话框。

当用户回答所有三个对话框时,我需要保持主线程

那是不可能的。你永远不会得到权限对话框,更不用说结果了。

这也没有必要。

简而言之:

  • 在方法中放置依赖于这些权限的代码
  • 如果hasPermissions()返回true,则调用该方法
  • 如果getPermissions()返回hasPermissions(),请致电false
  • 如果用户授予您所请求的权限,请从onRequestPermissionsResult()调用该方法

如果您不喜欢这样,那么a few dozen libraries旨在为使用运行时权限提供更简单的模式。也许其中一个会激起你的兴趣。

the documentation中介绍了运行时权限的使用。

© www.soinside.com 2019 - 2024. All rights reserved.