1

première fois de publication ici J'espère que je le fais bien. J'essaie de détecter quand la carte SD est retirée d'un appareil, mon récepteur de diffusion fonctionne très bien sur une ancienne tablette ICS (je peux obtenir le MEDIA_UNMOUNTED, BAD_REMOVAL, etc, actions d'intention) mais dans une autre tablette avec android 4.2 rien ne se passe lorsque je retire la carte SD, aucune des actions suivantes intention sont diffusés:Intentions de suppression de la carte SD ne fonctionnant pas

  • MEDIA_BAD_REMOVAL

  • MEDIA_EJECT

  • MEDIA_REMOVED

  • MEDIA_UNMOUNTED

Je n'ai trouvé 1 question liée à cela ici, mais la solution a été d'ajouter le dataScheme « fichier » que j'ai déjà essayé. Voici mon code:

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

À quoi ressemble votre manifeste? –

+0

Je n'ai rien ajouté dans le manifeste puisque je faisais tout ce qui était programmatique, et il semble fonctionner dans la vieille tablette 4.0. Devrais-je faire quelque chose là aussi? –

+0

Oui, vous devez enregistrer 'BroadcastReceiver' dans le manifeste. Je vais répondre une seconde. –

Répondre

0

Vous devez enregistrer le BroadcastReceiver dans le manifeste comme celui-ci

<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> 

Ensuite, créez une nouvelle classe avec le nom BroadcastSDCard .class et utiliser celui-ci.

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

Vous pouvez toujours utiliser votre code existant

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); 

ne pas oublier aussi de désenregistrer dans votre méthode onDestroy() ou vous obtiendrez des fuites.

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

Je vais essayer –

+0

@NikolasManuelides Ceci est une nouvelle classe. Faire une nouvelle classe. –

+0

oui, je n'ai pas bien lu, je vais essayer ça et rendre compte, merci. –