2017-06-27 38 views
0

代碼如下閱讀失敗的內部存儲的文件,錯誤是 「打開失敗:EACCES(拒絕)」

... 
File newFile = new File(getFilesDir(), "time.jpg"); 
Bitmap bitmap=BitmapFactory.decodeFile(newFile.toString()); 
show_image.setImageBitmap(bitmap); 
.... 

獲取誤差低於

Unable to decode stream: java.io.FileNotFoundException: 
/data/user/0/com.example.flover.testdemo/files/time.jpg: 
open failed: EACCES (Permission denied) 

Android設備的版本是6.0,我無法弄清楚爲什麼會出現這個錯誤,根據google api文檔,應用程序有權訪問屬於自己的文件。 如果有人得到答案,請告訴我。由於

回答

0

試試這個,

private Context mContext=YourActivity.this; 

private static final int REQUEST = 112; 

if (Build.VERSION.SDK_INT >= 23) { 
    String[] PERMISSIONS = {android.Manifest.permission.WRITE_EXTERNAL_STORAGE,android.Manifest.permission.READ_EXTERNAL_STORAGE}; 
    if (!hasPermissions(mContext, PERMISSIONS)) { 
     ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST); 
    } else { 
     createFile(); 
    } 
} else { 
    createFile(); 
} 

獲取權限結果的棉花糖

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case REQUEST: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        createFile(); 
      } else { 
       Toast.makeText(mContext, "The app was not allowed to write in your storage", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

檢查權限

private static boolean hasPermissions(Context context, String... permissions) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
     for (String permission : permissions) { 
      if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

清單

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

CreateFile函數:

public void createFile() 
{ 
    File newFile = new File(getFilesDir(), "time.jpg"); 
    Bitmap bitmap=BitmapFactory.decodeFile(newFile.toString()); 
    show_image.setImageBitmap(bitmap); 
} 
+0

嘗試並沒有運氣,夥計,仍然得到同樣的錯誤。 PS。我想要讀取的文件存儲在內部存儲器中。所以我不認爲像你這樣的權限會適合這裏。 – Leon

相關問題