【问题标题】:onReceive() is not called in android broadcast-receiver for static broadcastsandroid广播接收器中未调用onReceive()进行静态广播
【发布时间】:2019-03-05 07:52:49
【问题描述】:

我正在学习 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();
}

}

【问题讨论】:

  • 需要更多逻辑,例如您如何启动服务
  • @AravindV 我没有任何服务,我只想在更改飞行模式或插入或拔出耳机时接收广播。

标签: android broadcastreceiver


【解决方案1】:

如果您的应用面向 8.0 或更高版本。您不能再在清单中为隐式广播注册广播接收器,android.intent.action.AIRPLANE_MODE 是隐式广播。更多详情read this

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多