广播接收器不在服务中工作

时间:2015-02-24 20:24:35

标签: android broadcastreceiver android-service

我正在尝试在我的服务中使用BroadcastReceiver,但它无法正常工作。

我在我的活动中在onCreate中开始我的服务。然后在服务onCreate中我调用以下内容来注册广播接收器:

    IntentFilter filter = new IntentFilter();
    registerReceiver(DataUpdateReceiver, filter);

这是我试图注册的广播接收器:

    private BroadcastReceiver DataUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Test", Toast.LENGTH_LONG).show();

    }
};

然后在我试图调用它的Activity中,这样就会显示Toast消息。

            Intent i = new Intent();
            sendBroadcast(i);

但Toast没有显示,我也尝试过登录,但没有显示任何内容。如果有人可以帮我解决这个问题,那将会很感激。

2 个答案:

答案 0 :(得分:1)

在我看来,您必须指定触发onReceive()方法的操作(或操作)。这样的事情可能会对你有所帮助:

IntentFilter filter = new IntentFilter("some_action");
registerReceiver(DataUpdateReceiver, filter);

...

Intent i = new Intent("some_action");
sendBroadcast(i);

答案 1 :(得分:1)

在课堂上声明

public final static String MY_RECEIVER_START = "com.yourcompanyname.appname.MY_RECEIVER_START";

private Radio radio;

在服务构造函数中

    //Initiate our receiver
    radio = new Radio();

    //Activate our recevier
    context.registerReceiver(radio, new IntentFilter(MY_RECEIVER_START));

同样在服务中,创建接收器类和显示toast的方法

/**
 * Receiver Class
 * This setup checks for the incoming intent action to be able to
 * attach more messages to one receiver.
 */
private class Radio extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals(MY_RECEIVER_START)){
            //show toast


        }

    }
}

从应用程序的任何地方发送消息到我们的无线电

context.sendBroadcast(new Intent("com.yourcompanyname.appname.MY_RECEIVER_START"));