2011-11-23 59 views
2

我在設備啓動時運行服務,該服務只是從SD卡加載圖像並使其成爲壁紙。當設備啓動時出現錯誤。但SD卡完成加載後,服務將圖像設置爲壁紙。設備啓動後在設備啓動後運行一項服務完成加載後

<action android:name="android.intent.action.BOOT_COMPLETED" /> 

我開始這樣的服務^,我想問一下在SD卡完成加載後是否有辦法啓動服務。

回答

1

您可以等待SD卡加載。一種方法是使用android.intent.action.MEDIA_MOUNTEDaction

另一種方式是民調中一些最大和放棄,如果不安裝:

String mountState = Environment.getExternalStorageState(); 
int tries = 15; 
do { 
    if (!mountState.equals(Environment.MEDIA_MOUNTED)) { 
     Log.i(LOG_TAG, "External media present but not mounted. Waiting 15 seconds for mount..."); 
     try { 
      Thread.sleep(1000); // sleep for a second 
     } catch (InterruptedException e) { 
      Log.w(LOG_TAG, "Interrupted!"); 
      break; 
     } 
     mountState = Environment.getExternalStorageState(); 
    } else { 
     Log.i(LOG_TAG, "External media mounted"); 
     break; 
    } 
} while (--tries > 0); 
if (tries == 0) // give up 

希望這有助於。

3

有媒體(SD卡)後,安裝與設置爲MEDIA_MOUNTED動作的意圖廣播。

+0

感謝這個偉大的工作! –

+0

很高興答案很有幫助!如果解決了您的問題,您可以將答案標記爲已接受。 – kabuko

1

編輯:我不知道有用於MEDIA_MOUNTED一個目的,我會用下面貼,而不是答案。

我會做的是推出你怎麼把它與業務內繼續檢查時看到的SD卡安裝,可能每300毫秒或東西的服務。這question顯示如何檢測SD卡是否已安裝。

1

MEDIA_MOUNTED操作將在此處起作用,但您必須在清單文件中包含它的意圖過濾器,並且還必須將接收方意向過濾器的數據方案也更改爲「文件」。

<receiver android:name="YourReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.MEDIA_MOUNTED"></action> 
      <data android:scheme="file"/> 
     </intent-filter> 
    </receiver> 
相關問題