2012-03-22 261 views
3

我有一個Android內部存儲問題。我在包根文件夾中創建了一個文件夾,調用getDir()MODE_WORLD_WRITEABLE,因爲我想讓相機應用程序在此文件夾中寫入捕獲的圖像。無論如何,我可以看到捕獲的圖像在DDMS的文件夾內。 問題是我無法讀取該文件。Android內部存儲讀取文件

我試圖讀取文件使用此代碼:

File file = context.getDir("images", Context.MODE_WORLD_READABLE); 
File image = new File(file, "image.jpeg"); 
if (image.canRead()) 
    Log.w("read", "can read"); 
else 
    Log.w("read", "can't read"); 

而在logcat中,只有第二條消息(無法讀取)。

我也嘗試使用文件名創建FileInputStream,但我收到FileNotFoundException

有人能告訴我我在做什麼錯嗎?

在此先感謝

編輯:

讀取文件是正確的,但唯一的問題是,當凸輪的應用程序是保存圖像到指定的位置,允許通過凸輪的應用程序被設置到圖像文件是-rwxrwx---.改變後使用

adb (chmod 777 image.jpeg) 

我能夠讀取圖像。有趣的是,凸輪應用程序正在使用----rwxr-x將圖像文件寫入sdcard

有沒有辦法在運行時更改文件權限?

+0

你是否確定該文件在軟件包根目錄中,而不是在'files'子目錄中?將文件放入程序包根目錄本身並不常見。 – 2012-03-22 23:23:59

+0

在包根目錄下是文件夾_images_,並在該文件夾內有文件。如果設備沒有外部存儲,我正在使用內部存儲。我不知道如何使用MODE_WORLD_WRITEABLE在_files_中創建文件夾,以便cam應用程序可以寫入捕獲的圖像。 – Emran 2012-03-22 23:30:25

回答

1

爲什麼不把它放在默認的照片目錄中?

File path = Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES); 
File file = new File(path, "DemoPicture.jpg"); 

(來源:http://developer.android.com/reference/android/os/Environment.html

又見一個更完整的例子調用相機應用:http://developer.android.com/training/camera/photobasics.html

+1

嗨,也許你可以在你的答案中包括這個,因爲大多數人想要在畫廊展示他們的照片後,採取它並想知道爲什麼它不工作。保存廣播以後註冊文件:'sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse(「file://」+ file.getAbsolutePath())));' – Vossi 2012-03-23 00:28:33

+0

getExternalStoragePublicDirectory()返回外部存儲。如果外部不可用,我想將圖像保存到內部存儲器。 – Emran 2012-03-23 00:59:10

+0

@Sparky:我無法找到另一個解決方案,所以我使用了這個。謝謝 :) – Emran 2012-03-24 20:22:44

0

引用到Android developers你應該使用openFileOutput()openFileInput()對內部存儲工作...你不被允許/不能在那裏製作演出。 Android自己做..當你的應用程序被刪除時,這些數據將被清除。

相關問題