Запускать сервис, когда устройство запускается после того, как sd завершает загрузку - PullRequest
2 голосов
/ 24 ноября 2011

Я запускаю сервис, когда устройство загружается, и этот сервис просто загружает изображение с SD-карты и делает его обоями. Когда устройство запускается, я получаю ошибку. Но после того, как SD-карта заканчивает загрузку, сервис устанавливает изображение в качестве обоев.

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

Я запускаю службу следующим образом ^ и хочу спросить, есть ли способ запустить службу после завершения загрузки SD-карты.

Ответы [ 4 ]

3 голосов
/ 24 ноября 2011

Предназначена широковещательная рассылка для после подключения носителя (SD-карты) с установленным действием MEDIA_MOUNTED .

1 голос
/ 03 июля 2012

Действие MEDIA_MOUNTED будет работать здесь, но вы должны включить фильтр намерений для него в файл манифеста, а также вы должны также изменить схему данных для фильтра намерений получателя на «файл».

    <receiver android:name="YourReceiver">
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_MOUNTED"></action>
            <data android:scheme="file"/>
        </intent-filter>
    </receiver>
1 голос
/ 24 ноября 2011

Вы можете дождаться загрузки SD-карты. Одним из способов является использование android.intent.action.MEDIA_MOUNTED action .

Другой способ - опросить до некоторого максимума и сдаться, если не смонтирован:

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

Надеюсь, это поможет.

1 голос
/ 24 ноября 2011

Изменить: я не знал, что было намерение MEDIA_MOUNTED, я бы вместо этого использовал ответ, опубликованный ниже.

Что я хотел бы сделать, так это запустить службу в том виде, в каком она у вас, и внутри службы постоянно проверять, когда монтируется SD-карта, возможно, каждые 300 мс или что-то в этом роде. Этот вопрос показывает, как определить, была ли подключена SD-карта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...