1

первый раз размещение здесь, я надеюсь, что все правильно. Я пытаюсь обнаружить, когда SD-карта удалена с устройства, мой широковещательный приемник отлично работает на старом планшете ICS (я могу получить действия MEDIA_UNMOUNTED, BAD_REMOVAL и т. Д., Намерения), но в другом планшете с android 4,2 ничего не происходит при удалении карты SD, ни одно из следующих действий намерений не вещает:SD-карта намерение не работает

  • MEDIA_BAD_REMOVAL

  • MEDIA_EJECT

  • MEDIA_REMOVED

  • MEDIA_UNMOUNTED

Я только нашел 1 связанный с этим вопрос к этому здесь, но решение добавлял dataScheme «файл», который я уже пробовал. Вот мой код:

private BroadcastReceiver deviceCardsBroadcastReceiver; 
    private IntentFilter sdCardIntentFilter; 

    sdCardIntentFilter = new IntentFilter(); 
    sdCardIntentFilter.addAction(MEDIA_REMOVED); 
    sdCardIntentFilter.addAction(MEDIA_UNMOUNTED); 
    sdCardIntentFilter.addAction(MEDIA_BAD_REMOVAL); 
    sdCardIntentFilter.addAction(MEDIA_EJECT); 
    sdCardIntentFilter.addDataScheme("file"); 

    registerReceiver(deviceCardsBroadcastReceiver, sdCardIntentFilter); 

    deviceCardsBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

       switch (intent.getAction()) { 

        case MEDIA_BAD_REMOVAL: 
        case MEDIA_EJECT: 
        case MEDIA_REMOVED: 
        case MEDIA_UNMOUNTED: 
         Log.i("SD CARD REMOVED"); 
         break; 
        default: 
         break; 
       } 
      } 
    }; 
+0

Как выглядит ваш манифест? –

+0

Я не добавил ничего в манифест, так как я делал все программно и, похоже, работал на старом 4.0-планшете. Должен ли я что-то делать там? –

+0

Да, вы должны зарегистрировать 'BroadcastReceiver' в манифесте. Я отвечу одну секунду. –

ответ

0

Вы должны зарегистрировать BroadcastReceiver в манифесте как этот

<application> 
<receiver android:name=".BroadcastSDCard"> 
    <intent-filter> 
    <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> 
    <action android:name="android.intent.action.MEDIA_REMOVED" /> 
    <action android:name="android.intent.action.MEDIA_EJECT" /> 
    <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" /> 
    <data android:scheme="file" /> 
    </intent-filter> 
</receiver> 
</application> 

Затем создайте новый класс с именем BroadcastSDCard .class и использовать эту.

public class BroadcastSDCard extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // do your stuff 
    } 
} 

Вы можете использовать существующий код

private BroadcastSDCard deviceCardsBroadcastReceiver; 
private IntentFilter sdCardIntentFilter; 

deviceCardsBroadcastReceiver = new BroadcastSDCard(); 
sdCardIntentFilter = new IntentFilter(); 
sdCardIntentFilter.addAction(MEDIA_REMOVED); 
sdCardIntentFilter.addAction(MEDIA_UNMOUNTED); 
sdCardIntentFilter.addAction(MEDIA_BAD_REMOVAL); 
sdCardIntentFilter.addAction(MEDIA_EJECT); 
sdCardIntentFilter.addDataScheme("file"); 

registerReceiver(deviceCardsBroadcastReceiver, sdCardIntentFilter); 

Также не забудьте отменить его в вашем методе onDestroy() или вы получите утечку.

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (deviceCardsBroadcastReceiver!= null) 
      unregisterReceiver(updateBroadcast); 
    } 
+0

Я дам ему попробовать –

+0

@NikolasManuelides Это новый класс. Создайте новый класс. –

+0

Да, я плохо читал, попробую и отчитаю, спасибо. –