Android: намерение, когда SD-карта ИСТИННО установлена ​​и читается - PullRequest
3 голосов
/ 17 апреля 2011

У меня есть следующие настройки:

Приемник для монтирования на SD-карту (MountReceiver.java)

public IntentFilter getIntentFilter() {
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
    intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
    intentFilter.addDataScheme("file");
    return intentFilter;
}

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
        setMounted(true);
    } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
        setMounted(false);
    }
}

private void setMounted(boolean isMounted) {
    if (isMounted) {
        doPerformQuery();
    }
}

И когда я регистрирую получателя, я делаю:

registerReceiver(mountInstance, mountInstance.getIntentFilter());

Все отлично, модно и работает как положено. Я могу размонтировать и перемонтировать мою SD-карту, и мой метод setMounting запускается соответствующим образом. Проблема в том, что мой метод doPerformQuery () возвращает 0 результатов после монтирования SD-карты. Если я изменю код на:

Thread.sleep(5000);
doPerformQuery();

Тогда это будет работать время от времени. Это дает SD-карте 5 секунд, чтобы закончить «подготовку». Я хочу знать, когда SD-карта закончила готовиться и ее можно прочитать. В настоящее время я получаю намерение, когда SD-карта смонтирована, но она еще не «подготовилась», поэтому она не читается. Есть ли такое намерение зарегистрироваться, когда SD-карта закончила «подготовку». С другой стороны, я говорю «готовится», потому что это то, что говорит мой телефон в панели уведомлений. Я не уверен, является ли это стандартным для всех телефонов, так как я не могу найти ничего о SD-карте, готовящейся онлайн.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

В ответ на наши комментарии к вашему первоначальному вопросу ...

Я думаю, что логика заключается в том, что при отключении SD-карты поставщик контента для различных AV-носителей (видео, музыка, фотографии и т. Д.)очищен от чего-либо на SD-карте, потому что система не будет знать, когда (если вообще когда-либо) вернется та же SD-карта и будет ли она иметь те же файлы на ней.В результате полное сканирование выполняется каждый раз при установке SD-карты (что приводит к «готовящемуся» уведомлению).

Итак, в вашем случае проверка ACTION_MEDIA_SCANNER_STARTED и, что наиболее важно, связанный ACTION_MEDIA_SCANNER_FINISHED означает AVу провайдера медиа-контента будет текущий список всего на карте.

0 голосов
/ 17 апреля 2011

Проверьте результат Environment.getExternalStorageState() ( ссылка на API ).

Я почти уверен, что вы получите MEDIA_CHECKING только через несколько секунд.Если это правильно, вы можете использовать простой цикл while, чтобы проверить его и продолжить, когда состояние изменится на MEDIA_MOUNTED

...