2009-06-15 32 views
10

ho creato un BroadcastReceiver per rilevare SDCard montaggio e smontaggio caso, tuttavia, non sono in grado di ricevere tutti gli eventi a tutti: ecco il AndroidManifest.xml:Android BroadcastReceiver non può ricevere nessun eventi broadcast

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

E 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

qualcosa di sospetto nel file di registro? –

+1

Suppongo che sia necessario fornire Autorizzazione degli usi nel file Manifest provare questo

risposta

3

il Intent Javadoc specifica un'azione diversa: il valore nome. Utilizzare "android.intent.action.MEDIA_MOUNTED" invece di "android.content.Intent.ACTION_MEDIA_MOUNTED"

+0

Ho provato la costante di stringa effettiva, android.intent.action.MEDIA_MOUNTED, ma non riesco ancora a ricevere la trasmissione. Altri pensieri? – user121196

+0

Ho provato a creare il ricevitore dinamicamente in oncreate() sulla mia classe di attività, ma ancora nulla è ricevuto in ricezione del mio 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

Sono confuso, se questo non ha funzionato, allora perché l'hai contrassegnato come la risposta corretta? La risposta di chiuki è corretta o questa? –

42

È inoltre necessario impostare lo schema di dati su "file".

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

Riferimento: android-developers thread

+0

Non sono mai riuscito a farlo funzionare con la definizione in manifest, avevo bisogno di registrarlo con il codice. È possibile farlo funzionare con la definizione in manifest? – Lukap

+0

Inizia una nuova domanda e pubblica il tuo 'AndroidManifest.xml'. Darò un'occhiata. – chiuki

+0

Non riesco a trovare la causa da solo se non ho visto la tua risposta. – jowett

4

Se si registra un ricevitore trasmissione a livello di codice, è necessario impostare anche lo schema di "file".

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