2016-11-11 100 views
2

我有一個應用程序可以在External storage分區或內置/外部SD卡的標準設備上正常工作。但是最近我切換到Acer平板電腦進行測試,所有文件操作都被打破。無法訪問內部存儲器上的公共文件夾

該平板電腦只有Internal storage,標準公用目錄位於其上(下載,DCIM等)。我有一個存儲庫檢查是否可用,如果沒有 - 配置爲使用內部。但是,我完全無法訪問公共目錄,無論有沒有圖書館。這裏是我的印象:

  • 會檢測到外部分區,Environment.getExternalDirectory()返回一些公共文件夾,MEDIA_MOUNTED(讀/寫)狀態,但我不能寫,讀,在所有創建的任何目錄(讀/寫Manifest.xml的權限設置正確);/sdcard是空的,如果從某個地方訪問,而不是從另一個,一些伏都教符號鏈接魔術,我猜...

  • 另一方面,當我切換到使用Internal storage,我只能寫文件到應用程序私人文件夾(com/myapp /.../ app_)/ sdcard無法訪問,但實際上它位於內部。

  • 試圖使用IntentsContentResolvers爲了讓Android操作系統 本身決定如何獲取/提供訪問數據和公共內部目錄。即使它工作,我也需要完全重新實現我的FileUtils和FilePicker,僅僅是因爲那個特定的設備。(該應用在多個平板電腦,手機,模擬器上正常工作...)
  • adb shell from terminal give me直接訪問公共內部目錄; Android Device Monitor不;

有任何意見表示讚賞。謝謝。

+1

https://developer.android.com/training/permissions/requesting.html – 1615903

+0

非常感謝,1615 ...!這解決了問題。 – speirs23

回答

0

按照下面的鏈接瞭解詳情:

https://developer.android.com/training/basics/data-storage/files.html https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

當文件保存到內部存儲,您可以通過調用兩種方法之一獲取合適的目錄文件

  • getFilesDir()
  • getCacheDir()

例如:

File file = new File(context.getFilesDir(), filename); 

或者,你可以調用openFileOutput()來獲取寫入文件,在你的內部目錄一個FileOutputStream。例如,下面是一些文字寫入文件:

String filename = "myfile"; 
String string = "Hello world!"; 
FileOutputStream outputStream; 

try { 
    outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
    outputStream.write(string.getBytes()); 
    outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

謝謝,但我嘗試過。它使用應用程序的私人位置。我需要能夠在公共文件夾(下載,DCIM)中創建/讀取/寫入文件。對於這個特定設備的內部存儲器恰好是這樣。 – speirs23

相關問題