2016-06-24 81 views
0

的Android 2.1.2工作室,API 23無法下載使用下載管理器的文件在模擬器

Error: 

java.lang.SecurityException異常:沒有寫 到/存儲許可/模擬/ 0 /下載/ aabd.pdf:用戶10059和 當前進程都沒有android.permission.WRITE_EXTERNAL_STORAGE。

代碼:

 File file = new File(Environment.getExternalStoragePublicDirectory 
      (Environment.DIRECTORY_DOWNLOADS), nameOfFile); 
    request.setDestinationInExternalPublicDir 
    (Environment.DIRECTORY_DOWNLOADS, nameOfFile); 
    request.setVisibleInDownloadsUi(true); 
    myDownloadReference = downloadManager.enqueue(request); 

在設備,它工作正常。

清單中允許有

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.player"> 


<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

回答

1

你必須檢查的權限這樣,如果你有targetSdk 23

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { 
     checkPermission(); 
    } 
    else { 

    File file = new File(Environment.getExternalStoragePublicDirectory 
     (Environment.DIRECTORY_DOWNLOADS), nameOfFile); 
      request.setDestinationInExternalPublicDir 
     (Environment.DIRECTORY_DOWNLOADS, nameOfFile); 
     request.setVisibleInDownloadsUi(true); 
     myDownloadReference = downloadManager.enqueue(request); 
    } 


private void checkPermission() { 
      if (ContextCompat.checkSelfPermission(this, 
        Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, 
       Manifest.permission.READ_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED) {//Can add more as per requirement 

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

      } else { 

      } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case 123: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     File file = new File(Environment.getExternalStoragePublicDirectory 
     (Environment.DIRECTORY_DOWNLOADS), nameOfFile); 
      request.setDestinationInExternalPublicDir 
     (Environment.DIRECTORY_DOWNLOADS, nameOfFile); 
     request.setVisibleInDownloadsUi(true); 
     myDownloadReference = downloadManager.enqueue(request); 

      } else { 

       checkPermission(); 
      } 
      return; 
     } 
    } 
} 
+0

謝謝,但爲什麼我不得不再次寫清單權限@Nisarg –

+0

@GI Joe對於targetSdk:yes您必須這樣做 – Nisarg

+0

@ G.IJoe https://developer.android.com/training/permissions/requesting。 html – Nisarg

0

爲SD卡仿真模擬器中啓用?您可能需要使用Genymotion模擬器代替內置

+0

是的,我啓用it.Okay,我嘗試使用genymotion。 –

相關問題