2016-06-24 15 views
0

Android Studio 2.1.2 API 23Dateien können nicht mit Download-Manager in Emulator

Error: 

java.lang.SecurityException zum Download: Keine Erlaubnis zu schreiben zu/storage/emulierten/0/Download/aabd.pdf: Weder der Benutzer 10059 noch der aktuelle Prozess hat android.permission.WRITE_EXTERNAL_STORAGE.

Code:

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

In den Geräten, es funktioniert gut.

In Manifest Erlaubnis ist es

<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" /> 

Antwort

1

Sie müssen überprüfen Erlaubnis wie diese verwenden möchten, wenn Sie 23 targetSdk

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

Danke, Aber wieso muss ich wieder Manifest schreiben @Nisarg –

+0

@GI Joe ja für targetSdk: 23 müssen Sie so tun – Nisarg

+0

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

0

Ist Emulation SD-Karte wird in Emulator aktiviert? Sie können Genymotion Emulator anstelle von Einbau-

+0

ja, ich aktiviert it.Okay, ich versuche genymotion zu verwenden. –