2016-11-12 3 views
0

Ich benutze Erlaubnis Laufzeit in App, weil Android 6+ es für gefährliche Erlaubnis aber bis zwingen, APP zu stoppen mein Code nicht Datei im Speicher speichern, obwohl Benutzer diese Erlaubnis im Dialog erlauben.Erhalte Fehler Erlaubnis write_external_storage mit Laufzeit Erlaubnis

Mein Code für die Erlaubnis erhalten, Laufzeit:

if(ContextCompat.checkSelfPermission(MainActivity.this, 
        android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != 
PackageManager.PERMISSION_GRANTED){ 
        ActivityCompat.requestPermissions(MainActivity.this,new String[]{ 
          Manifest.permission.WRITE_EXTERNAL_STORAGE},1); 
      }else{ 
       saveFile(); 
      } 

Listener für die Prüfung von Benutzer gewährt oder verweigert:

public void onRequestPermissionsResult(int requestCode,String[] permission,int[] grantedResult){ 
    super.onRequestPermissionsResult(requestCode, permission, grantedResult); 
    switch(requestCode){ 
     case 1: 
      if(grantedResult.length > 0 && grantedResult[0] == PackageManager.PERMISSION_GRANTED){ 
       Log.i("TAG","Permission Granted"); 
      }else{ 
       Log.i("TAG","Permission Denied"); 
      } 
    } 
} 

Und Fehler logcat:

java.io.FileNotFoundException: /storage/1B0A-390B/hamed-baradaran.mp3: open failed: EACCES (Permission denied) 

Savefile-Methode in dieser:

public void saveFile(){ 
    InputStream in; 
    OutputStream out; 

    try{ 

     in = getResources().openRawResource(R.raw.hamedbaradaran); 
     out = new FileOutputStream(Environment.getExternalStorageDirectory()+"/hamed-baradaran.mp3"); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while((length = in.read(buffer)) > 0) 
      out.write(buffer,0,length); 

     out.flush(); 
     out.close(); 
     in.close(); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

Bitte helfen Sie mir

+0

Sind Sie versuchen, jede lesen Datei? Hast du zusätzlich die Erlaubnis zum Manifest hinzugefügt? –

+0

Nein Ich möchte die Datei speichern –

+0

Ja, ich habe die Berechtigung hinzugefügt, um zu manifestieren –

Antwort

0

Hallo können Sie die Erlaubnis anfordern, wenn app Start versuchen. ich glaube, es Fehler, denn wenn u Permission erstes Mal dann Fehler erhalten überprüfen, aber zweites Mal Bild sein kann meint es wird versuchen gespeichert ..

+0

keine Diese Methode Erlaubnis Laufzeit in OnClick für Button und wenn ich auf die Schaltfläche klicken, bis erzwingen Stop App nächsten Klick im Dialogfeld für die Berechtigung anwenden, Fehler existiert –

+0

ohk Please Permission Check, wenn App Start oder MainActivity starten, aber nicht Code von saveImage –

+0

setzen okay und wenn saveImage verwenden? meinst du ab dem zweiten mal gleiche kraft stop app? –

0

Und versuchen, diesen Code zu Saveimage

public static String SaveImage(Bitmap finalBitmap) { 
    String filePath; 
    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/saved_images_camera"); 
    myDir.mkdirs(); 
    Random generator = new Random(); 
    int n = 10000; 
    n = generator.nextInt(n); 
    String fname = "Image-" + n + ".png"; 
    // filePath = "Image-" + n + ".jpg"; 

    File file = new File(myDir, fname); 
    filePath = file.getAbsolutePath(); 
    //String tmpFilePath = file.getPath().toString(); 
    IRoidAppHelper.Log("tmpFilePath", filePath); 
    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.flush(); 
     out.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return filePath; 
} 
+0

Tnx Robby aber nicht funktioniert für mich Ich benutze Ihren Code und Ihre Art und Weise, aber sonst nichts passieren –