2014-02-06 47 views
3

我試圖將應用程序文件目錄中的圖像公開存儲在目錄中。通過公開,我的意思是我可以使用動作視圖意圖。android:公開存放目錄中的內部存儲文件

/** Saves the bitmap to app storage */ 
    public int SaveBitmap(Bitmap bitmap, String filename, Boolean scan){ 

     // Save the file 
     OutputStream os = null; 

     String path = context.getFilesDir() + "/MyAppName/"; 
     File file = new File(path); 
     if(!file.isDirectory())file.mkdirs(); 
     path += (filename + ".png"); 
     try { 
      os = new BufferedOutputStream(new FileOutputStream(path,true)); 
      //os = mContext.openFileOutput(, Context.MODE_PRIVATE); 
      bitmap.compress(CompressFormat.PNG, 100, os); 
      os.flush(); 
      os.close(); 
      bitmap.recycle(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return 1; //Failure 
     } 

     File fileR = new File(path); 

     fileR.setReadable(true, false); 
     // Show in Gallery 
     if(scan) ShowInGallery(filename); 

     return 0; // SUCCESS 

    } 

這段代碼不會做的工作,這些文件私下模式仍在產生。

使用:

context.openFileOutput(filename + ".png", Context.MODE_WORLD_READABLE); 

我能夠公開打開它們,但我不能將文件保存在一個目錄。

請注意,我針對的用戶沒有SD卡,這就是爲什麼我沒有使用外部存儲。

我該怎麼辦?

+0

如果重要的是圖像保持「私人」,除非採取行動,那麼您將需要實施一個「ContentProvider」來讓其他應用程序或意圖臨時訪問您的數據。如果所有圖像都可以訪問,您可以簡單地將它們存儲在外部,如下面解釋的答案。 – 323go

+0

閱讀文檔'context.getFilesDir' – njzk2

+0

@ njzk2 - 沒有幫助,那是內部存儲。 – katzenhut

回答

0

我認爲在我的情況下最安全的做法是使用Environment.getExternalStoragePublicDirectory (String type) 如果發現異常,我將使用普通的getFilesDir將其保存到內部存儲器中。我還沒有找到一種方法來使應用程序數據中的文件夾公開可讀。

這是因爲getExternalStoragePublicDirectory可能會失敗,如果設備應該有SD卡但未掛載。所以你不能依賴它。

+0

不好意思,但你爲什麼拒絕投票呢?它工作得很好,它做我需要做的事情。 – zed

6

您將要使用Environment.getExternalStoragePublicDirectory (String type)Environment.getExternalStorageDirectory作爲文件目錄的根目錄。有關更多詳細信息,請參見documentation

編輯:

從環境文檔下getExternalStorageDirectory()

注意:不要用這個詞混淆 「外部」 在這裏。該目錄 可以更好地被認爲是媒體/共享存儲。它是一個文件系統,它可以容納相對較大數量的數據,並在所有應用程序間共享(不強制執行權限) 。傳統上,這是SD卡的 ,但它也可以作爲 設備中的內置存儲設備實現,該設備與受保護的內部存儲設備不同,並且可以將 作爲文件系統安裝在計算機上。

所有「外部」的含義是它在您的應用程序或公共外部。所以,如果SD卡可用,則此方法默認爲該存儲目錄。如果設備不使用SD卡,則使用設備的內置存儲器。

+1

我不想使用外部存儲,這是因爲我想要定位沒有安裝SD卡的用戶。 – zed

+2

「外部」存儲不僅僅意味着外部存儲。請參閱編輯。 – Submersed

+1

「如果沒有SD卡可用,則使用設備的內置存儲。」不一定是真的 - 一個打算使用SD卡的設備,因爲它實現了ExternalStorage **,當該卡被移除時,沒有可用的外部存儲**。被問到的問題是完全合法的,儘管*可能有*替代品,並且即使嘗試訪問位於應用程序目錄中的文件,即使它們實際上具有對它們的訪問權限,某些組件也可能不是。 –

相關問題