Android BroadcastReceiver无法接收任何广播事件

use*_*196 10 android broadcastreceiver

我创建了一个BroadcastReceiver来检测SDCard挂载和卸载事件,但是,我根本无法接收任何事件:这里是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>
Run Code Online (Sandbox Code Playgroud)

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

    }
}
Run Code Online (Sandbox Code Playgroud)

chi*_*uki 45

您还需要将数据方案设置为"文件".

   <intent-filter>
     <action android:name="android.intent.action.MEDIA_MOUNTED" />
     <data android:scheme="file" /> 
   </intent-filter>
Run Code Online (Sandbox Code Playgroud)

参考:android-developers线程


Tug*_*ghi 4

Intent javadoc 指定了不同的 action:name 值使用“android.intent.action.MEDIA_MOUNTED”而不是“android.content.Intent.ACTION_MEDIA_MOUNTED”

  • 我很困惑,如果这不起作用那你为什么将其标记为正确答案?chiuki 的答案是正确的还是这个? (5认同)
  • 我遇到了同样的问题,他的回答并没有解决问题。@chiuki 的回答解决了这个问题。我必须添加 `&lt;data android:scheme="file" /&gt;` 才能使接收器按要求工作!希望这对其他人有帮助! (3认同)