2014-07-24 140 views
0

我有一個應用程序,它執行用戶從圖庫中選擇的圖像進行處理,處理完修改後的圖像然後保存回原始圖像的文件夾與修改文件名。在特定設備(主要是三星)上,新的KitKat權限限制嚴重限制非系統應用可以寫入例如外部SD卡或返回到典型的畫廊位置。 文檔建議通過Android KitKat MediaScannerConnection沒有找到保存到私人應用程序文件夾的圖像

getExternalFilesDir(null) 

這是精細,圖像被正確保存但隨後

MediaScannerConnection.scanFile 

的後續調用無法更新中央媒體數據庫寫入得到的專用包特定的文件夾由於修改後的圖像沒有出現在圖庫中,因此即使重新啓動應該強制全面掃描所有介質的設備也不會觸發圖像顯示。

換句話說,下面的代碼無法正常工作:

File appDir = MyActivity.this.getExternalFilesDir(null); 
File file = new File(appDir, "new_image.jpeg"); 
// Process image and write file away... 
MediaScannerConnection.scanFile(this, new String[] { file.getAbsolutePath() }, null, new  MediaScannerConnection.OnScanCompletedListener() { 
    @Override 
    public void onScanCompleted(String path, Uri uri) { 
    Log.i(LOG_TAG, String.format("Scanned file: %s", path)); 
    } 
}); 

的onScanCompleted方法火災,但畫廊不顯示的新形象。

有沒有人看到過這種行爲,MediaScanner不掃描'私人'應用程序文件夾,如果是的話,我還得到畫廊檢測並顯示新的圖像。

回答

2

如果你想讓圖庫被圖庫收回,你應該把它們放在適當的公共場所。您可以使用Environment.getExternalStoragePublicDirectory()來獲得正確的位置。

+0

但是,KitKat中的新權限限制(如果由硬件提供商強制執行,例如Samsung Galaxy Note 3)禁止正常應用根據http://source.android.com/devices/tech/storage/寫入此位置index.html的。 – user3874448

+0

如果您具有WRITE_EXTERNAL_STORAGE權限,則可以寫入此位置。 – Krylez

+0

Krylez,文檔說:「WRITE_EXTERNAL_STORAGE權限只能授予對設備上主外部存儲設備的寫入訪問權限,不允許將應用程序寫入輔助外部存儲設備」我真的對主要和次要外部存儲的構成感到困惑,另外我沒有三星設備來測試這個,運行KitKat的Android模擬器沒有兌現/強制執行這些限制,這頗具諷刺意味。 – user3874448

相關問題