2011-03-05 112 views
2

我有一個用戶可以繪製的應用程序,然後將該繪圖作爲.png文件「導出」到外部存儲設備(如果存在)。生成PNG,將文件複製到外部都像魅力一樣工作,但卻發生了一個相當獨特的問題;導出後,如果用戶通過我的文件(在這種情況下運行2.2的三星Tab)導航到圖像,他們可以看到.png文件,但是當它們打開它時,屏幕黑色約10秒...然後他們會看到圖片。此外,圖片也不會顯示在用戶的「圖庫」應用中。Android:媒體掃描程序未運行時出現問題

現在,如果用戶通過USB將設備連接到計算機,或者重新啓動設備,他們可以從我的文件中訪問圖像沒有問題,並且從這一點出現在「圖庫」中,但是再次新插入的文件在重新循環/連接設備之前會遇到同樣的問題。

我的想法是,這必須與媒體掃描儀相關(至少在「圖庫」問題的情況下,它肯定是)。

因此,因爲我瞄準的是Api 8+,我正嘗試使用靜態的MediaScannerConnection.scanFile()方法讓操作系統重新掃描並將我的圖像添加到圖庫中等。同時希望這可以解決奇怪的延遲問題在打開圖像。這裏是我的代碼:

MediaScannerConnection.scanFile(
    context, 
    new String[] { "/mnt/sdcard/MyApp" }, 
    null, 
    null 
); 

的logcat給了我下面的條目時,我出口的圖像,從而運行上面的電話:

DEBUG/MediaScannerService(2567): IMediaScannerService.scanFile: /mnt/sdcard/MyApp mimeType: null 
DEBUG/MediaScannerService(2567): onStartCommand : intent - Intent { cmp=com.android.providers.media/.MediaScannerService (has extras) } 
DEBUG/MediaScannerService(2567): onStartCommand : flags [0], startId [1] 
DEBUG/MediaScannerService(2567): ServiceHandler:handleMessage volume[null], filePath[/mnt/sdcard/MyApp] 
DEBUG/MediaProvider(2567): getSdSerial() sd state = removed 
INFO/Database(2567): sqlite returned: error code = 17, msg = prepared statement aborts at 43: [SELECT DISTINCT sd_serial FROM images WHERE sd_serial LIKE 'external_0x%'] 
ERROR/MediaProvider(2567): removeMediaDBData called 
DEBUG/MediaScanner(2567): prescan enter: path - /mnt/sdcard/MyApp 
DEBUG/MediaScanner(2567): prescan return 

所以,它看起來像MediaScanner越來越正確的位置,但沒有找到SD卡,這是正確的,並失敗。三星Tab有內置的非SD外部存儲,Android可以通過Environment.getExternalStorageDirectory()進行訪問。我如何告訴它掃描非SD存儲?

任何想法如何進行?

保羅

回答

3

發現這裏的解決方案,其中包括通過一個Intent發送廣播請求媒體掃描:

How to update the Android media database

也沒搞清楚這個問題與MediaScannerConnection.scanFile

0

每當你添加文件,讓它使用

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageAddedOrDeleted))); 

主要優勢MediaStore內容提供者知道:工作與MediaStore

支持刪除任何MIME類型:只需使用getContentResolver ().delete(uri,null,null)