2009-06-15 9 views
10

J'ai créé un BroadcastReceiver pour détecter SDCard mount et umount événement , cependant, je ne suis pas en mesure de recevoir des événements du tout: est ici le AndroidManifest.xml:Android BroadcastReceiver ne peut recevoir aucun événement de diffusion

<receiver android:enabled="true" android:label="SDCardMountReceiver" android:exported="true" android:name="xxx.broadcasts.SDCardBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="android.content.Intent.ACTION_MEDIA_MOUNTED"></action> 
     <!-- or <action android:name="android.content.Intent.ACTION_MEDIA_UNMOUNTED" />--></intent-filter> 
</receiver> 

Et la classe SDCardMountReceiver:

public class SDCardBroadcastReceiver extends BroadcastReceiver { 
    public SDCardBroadcastReceiver() { 
     super(); 
     System.err.println("constructor"); 
    } 

    public void onReceive(Context context, Intent intent) { 
     Log.d("SDCardBroadCastReceiver", "receive " + intent.getAction()); 
     System.err.println("jonathan receive " + intent.getAction()); 

    } 
} 
+0

quelque chose de suspect dans le fichier journal? –

+1

Je suppose que vous devez donner Uses Autorisation dans le fichier manifest essayez ceci

Répondre

3

le Intent javadoc spécifie une autre action: valeur de nom. Utilisez "android.intent.action.MEDIA_MOUNTED" au lieu de "android.content.Intent.ACTION_MEDIA_MOUNTED"

+0

J'ai essayé la constante de chaîne de caractères, android.intent.action.MEDIA_MOUNTED, mais toujours pas en mesure de recevoir la diffusion. d'autres pensées? – user121196

+0

J'ai essayé de créer le récepteur dynamiquement dans oncreate() sur ma classe Activity, mais rien n'est encore reçu dans onReceive de mon SDCardBroadcastReceiver.

 SDCardBroadcastReceiver myReceiver = new SDCardBroadcastReceiver(); \t IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED); \t filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); \t registerReceiver(myReceiver, filter); 
user121196

+4

Je suis confus, si cela n'a pas fonctionné alors pourquoi l'avez-vous marqué comme la bonne réponse? La réponse de chiuki est-elle correcte, ou celle-ci? –

42

Vous devez également définir le schéma de données sur "fichier".

<intent-filter> 
    <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
    <data android:scheme="file" /> 
    </intent-filter> 

Référence: android-developers thread

+0

Je n'ai jamais réussi à le faire fonctionner avec la définition dans le manifeste, j'avais besoin de l'enregistrer avec du code. Est-il possible de faire ce travail avec la définition dans le manifeste? – Lukap

+0

Commencez une nouvelle question et publiez votre 'AndroidManifest.xml'. Je regarderai. – chiuki

+0

Je ne peux pas trouver la cause moi-même si je n'ai pas vu votre réponse. – jowett

4

Si vous enregistrez un récepteur de radiodiffusion par programme, vous devez également définir le schéma de « fichier ».

IntentFilter filter = new IntentFilter(); 
filter.addAction(Intent.ACTION_MEDIA_MOUNTED); 
filter.addAction(Intent.ACTION_MEDIA_REMOVED); 
filter.addDataScheme("file"); 
mContext.registerReceiver(mExternalStorageReceiver, filter); 
Questions connexes