在Android广播接收器中未针对静态广播调用onReceive()

时间:2019-03-05 07:52:49

标签: android broadcastreceiver

我正在倾斜广播接收器。我在清单文件中声明了接收器,并且具有MyBroadcastReceiver类来接收意图,但是我无法接收任何意图。例如,当更改飞机模式或插入或拔出耳机时,永远不会调用onRecive()函数。以下是清单的代码。

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

以下是BroadCastReceiver类的代码。

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

}

1 个答案:

答案 0 :(得分:0)

如果您的应用定位到8.0或更高版本。您不能再为清单中的隐式广播注册广播接收器,并且android.intent.action.AIRPLANE_MODE是隐式广播。有关更多详细信息,read this

作为解决方法,您仍然可以在运行时使用Context.registerReceiver()动态注册隐式和显式广播。但是您的应用必须还活着才能得到它。