簡體   English   中英

如何授予對棉花糖上運行的android應用的權限?

[英]How to grant permissions to android app running on Marshmallow?

我有一個創建兩個文件夾並將數據存儲在這兩個文件夾中的應用程序。當我在棉花糖以下的版本上運行此應用程序時,一切正常。但是當我在棉花糖上運行相同的應用程序時,除非我手動授予權限,否則不會創建該文件夾進入應用程序設置。 這是我用來檢查權限的代碼:

private boolean checkWritePermission(){
        int result = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (result == PackageManager.PERMISSION_GRANTED){
            Log.d("WRITE_PERMISSION","Permission granted");

            return true;

        } else {

            return false;

        }
    }

    private boolean checkReadPermission(){
        int result = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
        if (result == PackageManager.PERMISSION_GRANTED){

            Log.d("READ_PERMISSION","Permission granted");
            return true;

        } else {

            return false;

        }
    }

這是我用來請求權限的代碼:

private void requestReadPermission()
    {
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.READ_EXTERNAL_STORAGE)){

            Toast.makeText(context,"This permission allows you to read downloaded magazine",Toast.LENGTH_LONG).show();

        } else {

            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE_READ);
        }

    }

    private void requestWritePermission(){

        if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.WRITE_EXTERNAL_STORAGE)){

            Toast.makeText(context,"This permission allows you to download the magazine",Toast.LENGTH_LONG).show();

        } else {

            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE_WRITE);
        }
    }

    private void requestInternetPermission()
    {
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.INTERNET)){

        }else{
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.INTERNET},PERMISSION_REQUEST_CODE_INTERNET);
        }
    }

這是onRequestPermissionsResult的代碼:-

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode)
    {
        case PERMISSION_REQUEST_CODE_READ:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {


            }else
            {

            }
            break;
        case PERMISSION_REQUEST_CODE_WRITE:
            if (grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {

            }else
            {

            }
            break;
        case PERMISSION_REQUEST_CODE_INTERNET:
            if (grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {

            }else
            {

            }
            break;




    }
}

我在oncreate中檢查權限,如下所示:

 if (checkReadPermission() && checkWritePermission())
        {
           Log.d("ALL PERMISSIONS","All permissions granted");

        }else
        {
            requestInternetPermission();
            requestReadPermission();
            requestWritePermission();

        }

用於檢查權限的代碼存在幾個問題:

if (checkReadPermission() && checkWritePermission()) {
   Log.d("ALL PERMISSIONS","All permissions granted");
} else {
    requestInternetPermission();
    requestReadPermission();
    requestWritePermission();
}
  1. 您應該一次請求所有權限,而不是一個一個地
  2. 您首先檢查的權限是Manifest.permission.INTERNET 這是一個易受攻擊的權限,因此總是被授予,這就是為什么您總是獲得權限的原因。
  3. 您只能從permission-group.STORAGE請求一個permission-group.STORAGE 該請求是: Manifest.permission.READ_EXTERNAL_STORAGEManifest.permission.WRITE_EXTERNAL_STORAGE

嘗試使用以下代碼:

if (checkWritePermission()) {
   Log.d("ALL PERMISSIONS","All permissions granted");
} else {
    requestWritePermission();
}

Github中有一些方便的權限檢查庫。

我正在使用PermissionDispatcher。 看看這個。

https://github.com/hotchemi/PermissionsDispatcher

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM