亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Marshmallow中的存儲權限錯誤

Marshmallow中的存儲權限錯誤

Helenr 2019-05-27 12:52:19
Marshmallow中的存儲權限錯誤在Lollipop中,下載功能在我的應用程序中運行良好,但是當我升級到Marshmallow時,我的應用程序崩潰并在我嘗試從互聯網下載到SD卡時出現此錯誤:Neither user  nor current process has android.permission.WRITE_EXTERNAL_STORAGE它抱怨這行代碼:DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);manager.enqueue(request);我在應用程序外的清單中擁有權限:<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WAKE_LOCK" />我清理并重建了項目,但它仍然崩潰。
查看完整描述

4 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

您應該使用以下方法檢查用戶是否已授予外部存儲權限:

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    Log.v(TAG,"Permission is granted");
    //File write logic here
    return true;}

如果沒有,您需要讓用戶授予您的應用權限:

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

當然這些僅適用于棉花糖設備,因此您需要檢查您的應用是否在Marshmallow上運行:

 if (Build.VERSION.SDK_INT >= 23) {
      //do your check here
 }

還要確保您的活動實施 OnRequestPermissionResult

整個權限如下所示:

public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted");
        return true;
    }}

權限結果回調:

@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    }}


查看完整回答
反對 回復 2019-05-27
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

除非有明確要求在外部存儲上寫入,否則您始終可以選擇將文件保存在app目錄中。在我的情況下,我不得不保存文件,浪費了2至3天后,我發現我是否更改了存儲路徑

Environment.getExternalStorageDirectory()

getApplicationContext().getFilesDir().getPath() //which returns the internal app files directory path

它在所有設備上都像魅力一樣。這是因為要在外部存儲上寫入,您需要額外的權限,但在內部應用程序目錄中編寫很簡單。


查看完整回答
反對 回復 2019-05-27
  • 4 回答
  • 0 關注
  • 804 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號