5

私は現在、外部ストレージから読み取るライブ壁紙を開発しています。デバイスが起動しているとき、ストレージの準備が整う前にライブ壁紙が起動される可能性があると思います。特に定期的なエラーチェックを行う場合。他の人が問題を報告していて、これが理由だと思います。外部ストレージがデバイスに即座にマウントされているようで、エラーチェックを強制する方法がわからないため、これをテストできないようです。だから私の最初の質問は、ライブ壁紙を起動する前に、システムが実際にBOOT_COMPLETEDインテントを実行するかどうかです。

そうでない場合、外部ストレージの準備が整うのを待つ適切な方法は何ですか。アプリの冒頭でこんな感じで呼ぼうと思っています

public void waitForExternalStorage()
{
    while(Environment.getExternalStorageState().equals(Environment.MEDIA_CHECKING))
    {
        try { Thread.sleep(1000L); }
        catch(InterruptedException e) { e.printStackTrace(); }
    }
}

起動時にMEDIA_REMOVED->MEDIA_UNMOUNTED->MEDIA_CHECKING(オプション)-> MEDIA_READYになる場合に備えて、他のケースをチェックする必要がありますか?

4

3 に答える 3

8

を登録しBroadcastReceiverて、外部ストレージの状態の変化をリッスンできます。

BroadcastReceiver externalStorageStateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        updateExternalStorageState();
    }
};

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
registerReceiver(mExternalStorageReceiver, filter);
updateExternalStorageState(); // You can initialize the state here, before any change happens

そしてupdateExternalStorageState()、変更後の実際の状態を確認できます。

protected void updateExternalStorageState() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        // SD card is mounted and ready for use
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        // SD card is mounted, but it is read only
    } else {
        // SD card is unavailable
    }
}
于 2012-10-05T15:04:25.220 に答える
3

ブロードキャストレシーバーを使用し、以下をリッスンしIntent.ACTION_MEDIA_MOUNTEDます。ブロードキャストアクション:外部メディアが存在し、マウントポイントにマウントされています。

于 2012-10-05T15:02:30.370 に答える