当前位置: 首页 > 知识库问答 >
问题:

静态BroadcastReceiver未接收自定义意图

郎聪
2023-03-14
@Override
public void onDestroy() {
    Log.i(TAG, "onDestroy");
    sendBroadcast(new Intent("com.myapp.app.RESTART_SERVICE"));
    stoptimertask();
    super.onDestroy();
}
public class RestarterBroadcastReceiver extends BroadcastReceiver {

    public RestarterBroadcastReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Service stopped, restarting...");

        context.startService(new Intent(context, ActivityRecognitionService.class));
    }
}

Android清单的重要部分是:

<receiver
    android:name=".RestarterBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.myapp.app.RESTART_SERVICE"/>
    </intent-filter>
</receiver>

为什么我的广播接收器没有收到意图?

共有1个答案

苏高峰
2023-03-14

你的问题可能是Android Oreo实际上禁止了隐式广播。解决这个问题的最简单方法是使用显式广播而不是隐式广播。

尝试将服务的ondestroy代码更改为以下代码:

@Override
public void onDestroy() {
    Log.i(TAG, "onDestroy");
    // Here you're using an explicit intent instead of an implicit one
    sendBroadcast(new Intent(getApplicationContext(), RestarterBroadcastReceiver.class));
    stoptimertask();
    super.onDestroy();
}

由于不再使用intent操作,您还可以将Android Manifest更改为以下内容:

<receiver
    android:name=".RestarterBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
</receiver>
 类似资料:
  • 当我将额外的内容传递给PendingIntent时,sendBroadcastRecencer永远不会接收到消息,因为从来没有调用过这个的方法。为什么会发生这种情况?

  • 我正在开发的一个应用程序允许用户自己读取确认短信的内容,输入验证码。对于使用早于Oreo(API 26)的操作系统的所有设备,BroadcastReceiver的实现工作正常,并允许正确接收SMS。在这个实现中,我的意思是将receiver对象放置在AndroidManifest中。 但是,从Oreo开始,必须显式地将BroadcastReceivers注册到适当的上下文。我对此执行如下: 在接收

  • 通知广播接收机: 谁能帮帮我吗?我不知道我做错了什么

  • 我试图在使用Apollo客户端的GraphQL查询中使用动态变量。我遵循了文档,但Apollo不断给我错误,说我的变量没有定义,最终以状态代码400回应。 然后,我会为每个变量得到一条错误消息,说明它尚未定义: [GraphQL错误]:消息:变量“$ID”未定义。,位置:[object object],[object object],路径:未定义 在这些错误消息中的每一条之后,我会得到一条状态代码

  • 本文向大家介绍Android BroadcastReceiver接收收到短信的广播,包括了Android BroadcastReceiver接收收到短信的广播的使用技巧和注意事项,需要的朋友参考一下 一、知识介绍   1、broadcastReceiver是广播接受者,四大组件之一。   2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。   3、使用场景:  

  • 我有Kafka主题,有多种类型的消息流入并使用Kafka Connect写入弹性搜索。流看起来不错,直到我不得不将唯一的消息集分离到唯一的索引中。也就是说,我必须根据字段(JSON消息)为新的数据集获取新的索引。 我如何配置/定制Kafka connect以实现同样的功能?每个消息都包含一个表示消息类型和时间戳的字段。 示例 Json 如下所示: Sample1: {“log”:{“data”:“