2016-11-12 39 views
0

我在應用程序中使用權限運行時,因爲Android 6+需要它的危險權限,但直到強制停止應用我的代碼不保存內存中的文件,即使用戶在對話框中允許此權限。獲得錯誤許可write_external_storage與運行時權限

我對獲得許可的運行時代碼:

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(); 
      } 

監聽從用戶授予或拒絕檢查:

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"); 
      } 
    } 
} 

和錯誤的logcat:

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

SAVEFILE方法在此:

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(); 
    } 
} 

請幫我

+0

你想讀的任何文件?另外,你是否也向Manifest添加了許可? – 2016-11-12 09:54:15

+0

不,我想保存文件 –

+0

是的,我增加了清單的權限 –

回答

0

你好你可以試試許可申請時,應用程序啓動。 我認爲有錯誤的,因爲當u檢查權限首次然後得到錯誤,但可能是第二次圖像救了我來試試吧..

+0

否這種方法的權限運行時在onClick的按鈕,當我點擊按鈕,直到不強制停止應用程序下一次單擊適用於對話框權限,錯誤已存在 –

+0

ohk請允許檢查應用程序啓動或MainActivity啓動時,但不放置代碼saveImage –

+0

好吧,當使用saveImage?你的意思是從第二次平等的力量停止應用程序? –

0

並嘗試這個代碼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但不適合我爲我工作我使用你的代碼和你的方式,但沒有發生其他事情 –

相關問題