2015-02-24 76 views
0

工作,我想使用我的BroadcastReceiver服务中,但它不能正常工作。广播reciever不是从服务

我开始在我的活动onCreate我的服务。然后在服务的onCreate我打电话以下注册广播reciever:

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

    } 
}; 

然后其他地方的活动,我想调用它,这样Toast消息就会显示出来。

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

但吐司没有显示,我也试过记录,但没有显示出来。如果有人可以帮我解决这个问题,我会很感激的。

回答

1

在我看来,你必须指定动作(或行为),其中火onReceive()方法。像这样的东西可以帮助你:

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

... 

Intent i = new Intent("some_action"); 
sendBroadcast(i); 
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)); 

而且在服务,打造接收机类和方法其中显示吐司

/** 
* 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"));