【问题标题】:all permissions not getting granted in android marshmallow在 android marshmallow 中未授予所有权限
【发布时间】:2016-12-01 10:17:30
【问题描述】:

我正在努力为我的 android 设备授予运行时权限。在我的情况下,一旦用户单击呼叫按钮,它应该要求 3 个权限 CALL_PHONE、CAMERA 和 RECORD_AUDIO。 它要求我在日志中看到的权限,但只授予了一项权限。再次,如果我杀死我的应用程序并单击呼叫按钮,现在将要求第二个权限,并且下一次是 lats 一个。不是同时询问所有 3 个。正如我在日志中看到的,它只在第一次询问并授予所有权限,但一次只询问一个。

 @JavascriptInterface
    public void askPermission(String permission){
        Log.d("Ask permission", permission);
        switch (permission){
        case "audioCall":
            askForPermission(Manifest.permission.CALL_PHONE,CALL_PHONE);
            askForPermission(Manifest.permission.CAMERA,CAMERA);
            askForPermission(Manifest.permission.RECORD_AUDIO,RECORD_AUDIO);
            break;
        case "videoCall":
            askForPermission(Manifest.permission.CALL_PHONE,CALL_PHONE);
            askForPermission(Manifest.permission.CAMERA,CAMERA);
            askForPermission(Manifest.permission.RECORD_AUDIO,RECORD_AUDIO);
            break;

        case "writeExternalStorage":
            askForPermission(Manifest.permission.CALL_PHONE,CALL_PHONE);
            askForPermission(Manifest.permission.CAMERA,CAMERA);
            askForPermission(Manifest.permission.RECORD_AUDIO,RECORD_AUDIO);
            break;

        case "WRITE_EXTERNAL_STORAGE":
            askForPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE);
            break;

        case "GET_ACCOUNTS":
            askForPermission(Manifest.permission.GET_ACCOUNTS,GET_ACCOUNTS);
            break;

        case "READ_CONTACTS":
            askForPermission(Manifest.permission.READ_CONTACTS,READ_CONTACTS);
            break;

        }
    }

public void askForPermission(String permission, Integer requestCode){
    Log.d("Permissions requested is+", permission);

    if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) {
            Log.d("Permission is already granted", ""+permission);
            //This is called if user has denied the permission before
            //In this case I am just asking the permission again
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode);

        } else {
            Log.d("asking for permissions", ""+permission);
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode);
        }
    } else {
        /* Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show();*/
        Log.d("Permission is already granted", ""+permission);
    }
}

logs.txt

12-01 15:36:54.911: D/Ask permission(20783): videoCall
12-01 15:36:54.912: D/Permissions requested is+(20783): android.permission.CALL_PHONE
12-01 15:36:54.912: D/Permission is already granted(20783): android.permission.CALL_PHONE
12-01 15:36:54.912: D/Permissions requested is+(20783): android.permission.CAMERA
12-01 15:36:54.913: D/Permission is already granted(20783): android.permission.CAMERA
12-01 15:36:54.921: D/Permissions requested is+(20783): android.permission.RECORD_AUDIO
12-01 15:36:54.923: D/Permission is already granted(20783): android.permission.RECORD_AUDIO

【问题讨论】:

  • 你为什么不尝试在一个 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.GET_ACCOUNTS, Manifest.permission.READ_SMS, Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_GET_ACCOUNTS);
  • working on giving the runtime permissions to my android device。不,不是你的设备。但是对于您的应用程序。编写代码,以便用户可以向您的应用授予权限。
  • 检查this链接它可能对你有帮助!
  • @greenapps 我的意思是一样的。我的应用程序的权限。
  • @Tasneem 同时询问所有权限不是好的做法。有时甚至您的应用也会因为同样的原因被拒绝

标签: android permissions


【解决方案1】:

让我们重写这个方法,它会处理结果。

@Override
    public void onRequestPermissionsResult(int requestCode,
            String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.

                } else {

                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }

            // other 'case' lines to check for other
            // permissions this app might request
        }
    }

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2011-05-31
    • 1970-01-01
    • 2017-03-01
    相关资源
    最近更新 更多