2009-06-15 26 views
10

he creado un BroadcastReceiver para detectar el monte y desmonte tarjeta SD caso, sin embargo, no soy capaz de recibir cualquier evento en absoluto: aquí está la AndroidManifest.xml:Android BroadcastReceiver no puede recibir eventos de difusión

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

Y la clase 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

¿Algo sospechoso en el archivo de registro? –

+1

Supongo que debe otorgar Permisos de uso en el archivo de Manifiesto intente esto

Respuesta

3

el Javadoc Intent especifica una acción diferente: nombre de valor. Utilice "android.intent.action.MEDIA_MOUNTED" en lugar de "android.content.Intent.ACTION_MEDIA_MOUNTED"

+0

He intentado la actual cadena constante, android.intent.action.MEDIA_MOUNTED, pero aún no puedo recibir la transmisión. ¿otros pensamientos? – user121196

+0

He intentado crear el receptor dinámicamente en oncreate() en mi clase Activity, pero todavía no se recibe nada en onReceive de mi 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

Estoy confundido, si esto no funcionó, ¿por qué lo marcó como la respuesta correcta? ¿La respuesta de chiuki es correcta, o esta? –

42

También debe establecer el esquema de datos en "archivo".

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

Referencia: android-developers thread

+0

Nunca logré que funcione con la definición en manifiesto, necesitaba registrarlo con código. ¿Es posible hacer que esto funcione con la definición en manifiesto? – Lukap

+0

Comience una nueva pregunta y publique su 'AndroidManifest.xml'. Le daré un vistazo. – chiuki

+0

No puedo encontrar la causa yo mismo si no veo tu respuesta. – jowett

4

Si se registra un receptor de radiodifusión mediante programación, también debe establecer el esquema de "archivo".

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