2011-04-02 27 views
1

我有一個Android程序,通過加載一些用戶的媒體開始。偶爾程序崩潰 - 無論是在模擬器上還是在實際的手機上。我發現這是因爲有時媒體只有在活動運行一段時間後纔可用於該程序。在Android程序開始時初始化MediaScanner

發生這種情況時,這裏是典型的日誌輸出的順序:

  1. DEBUG/MediaScanner(166):執行opendir /系統/媒體/失敗,錯誤號:2 < --program ERROR HERE
  2. DEBUG/MediaScannerService(166):完成掃描體積內
  3. DEBUG/MediaScannerService(166):開始掃描體積外部
  4. VERBOSE/MediaProvider(166):/ SD卡卷ID:45454545
  5. VERBOSE/MediaProvider(166):附帶體積:外部
  6. DEBUG/MediaScannerService(166):完成掃描體積外部< - 這是MIDDLE計劃的

該方案具有在#1的錯誤,因爲它試圖加載在#6之前不可用的媒體。

有什麼方法可以強制Android在程序開始時完成MediaScannerService?

另外,有什麼辦法來檢查MediaScannerService何時完成掃描?

謝謝。

回答

4

你可以在你的代碼中添加廣播接收器和處理ACTION_MEDIA_SCANNER_FINISHED廣播。一旦完成掃描,它實際上是由MediaScannerService發送的。希望下面的示例代碼有所幫助。

IntentFilter filter = new IntentFilter(); 
filter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); 
filter.addDataScheme("file"); 
registerReceiver(mReceiver, filter); 

BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) { 
       Toast.makeText(MediaScannerActivity.this, "Scan complete.", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    };