У меня есть следующая установка:
SD-карта Mount Receiver (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-карту, и мой метод setMounted запускается соответствующим образом. У меня проблема в том, что мой метод doPerformQuery() возвращает 0 результатов после установки SD-карты. Если я изменю код на:
Thread.sleep(5000);
doPerformQuery();
Тогда это будет работать, иногда. Это дает SD-карте 5 секунд, чтобы закончить «подготовку». Я хочу знать, когда SD-карта закончила подготовку и может быть прочитана. В настоящее время я получаю намерение, когда SD-карта установлена, но она еще не «подготовилась», поэтому ее невозможно прочитать. Есть ли такое намерение зарегистрироваться, когда SD-карта закончит «подготовку». Кстати, я говорю «подготовка», потому что это то, что мой телефон говорит в панели уведомлений. Я не уверен, что это стандартно для всех телефонов, поскольку я не могу найти в Интернете ничего о подготовке SD-карты.