android广播接收器中未调用onReceive()进行静态广播
Posted
技术标签:
【中文标题】android广播接收器中未调用onReceive()进行静态广播【英文标题】:onReceive() is not called in android broadcast-receiver for static broadcasts 【发布时间】: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 我没有任何服务,我只想在更改飞行模式或插入或拔出耳机时接收广播。 【参考方案1】:如果您的应用面向 8.0 或更高版本。您不能再在清单中为隐式广播注册广播接收器,android.intent.action.AIRPLANE_MODE
是隐式广播。更多详情read this
作为一种解决方法,您仍然可以在运行时使用Context.registerReceiver()
动态注册隐式和显式广播。但是您的应用需要处于活动状态才能接收它。
【讨论】:
以上是关于android广播接收器中未调用onReceive()进行静态广播的主要内容,如果未能解决你的问题,请参考以下文章
Android - 从广播接收器 onReceive() 获取上下文以发送到
BroadcastReceiver的onReceive方法是否会在动态注册时被调用?
如果我关闭活动,从 BroadcastReceiver.onReceive 调用 peekService 将返回 null