У меня есть следующие настройки:
Приемник для монтирования на 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-карте, готовящейся онлайн.