Android BroadcastReceiver non può ricevere eventi trasmessi
-
13-09-2019 - |
Domanda
Ho creato un BroadcastReceiver per rilevare SDCard montare e smontare evento, tuttavia, non sono in grado di ricevere tutti gli eventi a tutti: ecco l'AndroidManifest.xml:
<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());
}
}
Soluzione
Il intenti javadoc specifica un'azione diversa: nome valore. Usare "android.intent.action.MEDIA_MOUNTED" invece di "android.content.Intent.ACTION_MEDIA_MOUNTED"
Altri suggerimenti
È inoltre necessario impostare lo schema dei dati su "file".
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<data android:scheme="file" />
</intent-filter>
Riferimento: Android sviluppatori filetto
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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow