2016-01-14 72 views
1

我無法寫入android的外部存儲。我得到下面的堆棧跟蹤: 十月1日至14日:57:07.108:W/System.err的(17380):java.io.FileNotFoundException:android權限寫在外部存儲失敗

/mnt/media_rw/extSdCard/SterlingPixels.apk: open failed: EACCES (Permission denied) 
01-14 10:57:07.108: W/System.err(17380): at libcore.io.IoBridge.open(IoBridge.java:456) 
01-14 10:57:07.108: W/System.err(17380): at java.io.FileOutputStream.<init>(FileOutputStream.java:87) 
01-14 10:57:07.108: W/System.err(17380): at java.io.FileOutputStream.<init>(FileOutputStream.java:127) 
01-14 10:57:07.108: W/System.err(17380): at java.io.FileOutputStream.<init>(FileOutputStream.java:116) 
01-14 10:57:07.108: W/System.err(17380): at com.codename1.impl.android.AndroidImplementation.createFileOuputStream(AndroidImplementation.java:4258) 
01-14 10:57:07.108: W/System.err(17380): at com.codename1.impl.android.AndroidImplementation.openFileOutputStream(AndroidImplementation.java:4210) 
01-14 10:57:07.108: W/System.err(17380): at com.codename1.io.FileSystemStorage.openOutputStream(FileSystemStorage.java:263) 
01-14 10:57:07.108: W/System.err(17380): at com.codename1.io.ConnectionRequest.readResponse(ConnectionRequest.java:783) 
01-14 10:57:07.108: W/System.err(17380): at com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:440) 
01-14 10:57:07.108: W/System.err(17380): at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:263) 
01-14 10:57:07.108: W/System.err(17380): at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) 
01-14 10:57:07.108: W/System.err(17380): at java.lang.Thread.run(Thread.java:818) 
01-14 10:57:07.108: W/System.err(17380): Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) 
01-14 10:57:07.108: W/System.err(17380): at libcore.io.Posix.open(Native Method) 
01-14 10:57:07.108: W/System.err(17380): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
01-14 10:57:07.108: W/System.err(17380): at libcore.io.IoBridge.open(IoBridge.java:442) 
01-14 10:57:07.108: W/System.err(17380): ... 11 more 

我不能包括在建的提示"<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>",因爲這會導致構建合併清單失敗..所以我假設構建系統正確創建此權限。除非它不起作用。或者我錯了?

+2

是否有可能您的設備連接爲USB - http://stackoverflow.com/questions/8854359/exception-open-failed-eacces-permission-denied-on-android – Chen

回答

1

我確實連接了USB,但是在斷開連接後,這並沒有立即解決我的問題。所以,起初我正在寫文件的路徑如下:

String root = roots[0]; 
     for (String root1 : roots) { 
      if (FileSystemStorage.getInstance().getRootType(root1) == FileSystemStorage.ROOT_TYPE_MAINSTORAGE) { 
       root = root1; 
       break; 
      } 
     } 
     root= root + FileSystemStorage.getInstance().getFileSystemSeparator(); 

由於一些奇怪的原因,上面的代碼總是返回外部存儲;我想它應該返回內部電話存儲。所以這總是讓我感到頭痛。這是在Android 5.1.1上。

我這樣做改變

String root = FileSystemStorage.getInstance().getAppHomePath(); 

這當然是工作,但這個肯定沒有解決我的情況下的權限問題。

0

您不需要在Codename One中添加WRITE_EXTERNAL_STORAGE權限,因爲它是默認請求的。較新的版本遷移到gradle,它在清單使用方面比Ant更嚴格,因此您會收到錯誤。

確保您的設備沒有作爲大容量存儲設備連接,有時會導致sd卡上的文件訪問發生衝突。