2016-07-28 1180 views
1

以下代碼輸出爲「Write granted」,但之後發生錯誤'/storage/emulated/0/Download/test.txt:open failed:EACCES(Permission denied)'android.permission.WRITE_EXTERNAL_STORAGE許可但訪問被拒絕

怎麼了?

@RunWith(AndroidJUnit4.class) 
public class FileStorageTest { 

    private static final String TAG = FileStorageTest.class.getSimpleName(); 

    @Test 
    public void test() throws Exception { 
     Context context = InstrumentationRegistry.getTargetContext(); 
     if (context.checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) { 
      Log.d(TAG, "Write granted"); 
     } else { 
      Log.e(TAG, "Write refused"); 
     } 

     File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"test.txt"); 
     new FileOutputStream(file).close(); 
    } 
} 
+0

可能是你還需要使用'READ_EXTERNAL_STORAGE權限從device.' –

+0

@TimCastelijns先生難道我們不需要定義無論是在'Runtime'權限讀取的數據? –

+0

@jaydroider你可以但文檔說*如果一個應用程序請求清單中列出的危險許可,並且該應用程序已在同一權限組中具有另一個危險權限,則系統會立即授予權限,而不會與用戶進行任何交互。 –

回答

1

您還需要添加READ_EXTERNAL_STORAGE權限從設備讀取數據。

RunTime也添加此權限。

if (context.checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) { 
      Log.d(TAG, "Read granted"); 
    } else { 
      Log.e(TAG, "Read refused"); 
    } 
+0

再次感謝您! – RenaudBlue

0

嘗試加入到這個清單文件:

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