【问题标题】:Android: Only first permission is requested when requesting for multiple permissionsAndroid:请求多个权限时只请求第一个权限
【发布时间】:2017-06-21 15:21:19
【问题描述】:

我的应用程序需要 5 个权限。这是我添加到我的 1 个活动的 onCreate() 中的代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

            }
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 2);
            }
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{android.Manifest.permission.CAMERA}, 3);
            }
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{android.Manifest.permission.GET_ACCOUNTS}, 4);
                    }

            if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{android.Manifest.permission.READ_CONTACTS}, 5);
            }
    }

当应用程序运行时,它只请求第一个权限,而不是剩余的。 我还将所有权限作为数组提供给请求权限函数,但我也只看到第一个权限弹出窗口。

有人可以帮忙吗?我在 Android M 设备上运行我的应用程序,我的目标和编译 sdk 版本是 26。

【问题讨论】:

  • 调用requestPermissions() 一次,只需一个String[] 即可获得所需的所有权限。自定义 String[] 以仅具有您需要的权限,而不是用户已经授予的权限。见this sample app
  • 已经试过了,发现同样的问题,我在问题中提到过
  • 那么也许你做错了,或者你已经拥有其他权限(因此不需要它们)。同样,请参阅 this sample appthis sample app,其中我毫无问题地请求了多个权限。

标签: android android-6.0-marshmallow android-permissions


【解决方案1】:

这样做:

int PERMISSION_ALL = 1; 
    String[] PERMISSIONS = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.GET_ACCOUNTS, Manifest.permission.READ_CONTACTS};

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    requestPermissions(new String[]{
                                Manifest.permission.READ_CONTACTS,
                                Manifest.permission.ACCESS_FINE_LOCATION},
                        ASK_MULTIPLE_PERMISSION_REQUEST_CODE);
    

    或使用Ted permisson

    【讨论】:

      猜你喜欢
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多