对于静态广播,在android广播接收器中未调用onReceive()

对于静态广播,在android广播接收器中未调用onReceive(),android,broadcastreceiver,Android,Broadcastreceiver,我靠在听筒上。我在清单文件中声明了receiver,并使用MyBroadcastReceiver类来接收意图,但我无法接收任何意图。例如,当飞机模式改变或耳机插入或拔出时,从不调用OnReceive功能。下面是清单的代码 <receiver android:name=".MyBroadCastReceiver" android:exported="true"> <intent-filter> <

我靠在听筒上。我在清单文件中声明了receiver,并使用MyBroadcastReceiver类来接收意图,但我无法接收任何意图。例如,当飞机模式改变或耳机插入或拔出时,从不调用OnReceive功能。下面是清单的代码

<receiver
        android:name=".MyBroadCastReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
            <action android:name="android.intent.action.HEADSET_PLUG" />
            <action android:name="android.intent.action.AIRPLANE_MODE" />
        </intent-filter>
    </receiver>

}如果您的应用程序目标为8.0或更高版本。您不能再为清单中的隐式广播注册广播接收器,并且android.intent.action.flair\u模式是隐式广播。欲知详情


作为一种解决方法,您仍然可以在运行时使用Context.registerReceiver动态注册隐式和显式广播。但你的应用程序需要处于活动状态才能接收它。

不需要更多的逻辑,比如你是如何启动的service@AravindV我没有任何服务,我只是想在飞机模式改变或耳机插入或拔出时接收广播。
public class MyBroadCastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
    StringBuilder sb = new StringBuilder();
    sb.append("Action: " + intent.getAction() + "\n");
    sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n");
    String log = sb.toString();
    Log.d(TAG, log);
    Toast.makeText(context, log, Toast.LENGTH_LONG).show();
}