广播接收器仅在设备重启android时才有效

时间:2013-04-02 04:09:42

标签: android broadcastreceiver intentfilter bootcompleted

您好我正在开发我正在定义一个广播接收器的Android应用程序。我正从我的活动中调用接收器。我正在定义这样的广播接收器:

 public class MyScheduleReceiver extends BroadcastReceiver {

   private static final long REPEAT_TIME = 100 * 5;

  @Override
  public void onReceive(Context context, Intent intent) {
      Log.i("RRRRRRRRRRRRRRRRRRRRRRRR", "on receive");

  }
} 

在android清单文件中我定义如下:

 <receiver android:name="abc.xyz.MyScheduleReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver> 

在主要活动中,我正在调用我的广播接收器:

//in activity oncreate 
startService(new Intent(this, MyScheduleReceiver.class));

我的问题是,当呼叫启动服务时,它实际上没有启动我的服务。但是,当我重新启动我的设备时,它启动了我的服务,因为我给了意图过滤器“BOOT_COMPLETED”。实际上,当我打电话给我的服务时,我想做的就是我的服务必须启动,

我做错了什么。如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

这里发生的实际情况是,您可以在开始活动时盯着广播接收器,并且此广播接收器开始监听BOOT_COMPLEATED正在发生与否。当这种情况发生时,就会发生这种情况。如果您需要在后台启动进程,可以使用BroadcastReciever的服务。 BroadcastRecievers用于监听某些事件的发生。通过这个,它会帮助你

Services

BroadcastReceiver

答案 1 :(得分:1)

你要么感到困惑,要么就是你没有把问题写好。您在清单中拥有的内容(以及Android的工作原理)是,当BOOT_COMPLETED发生时,它将调用您定义的BroadcastReceiver。它不会自动启动活动或服务。如果你想这样做,你需要在接收器的onReceive函数中调用startService或startActivity。

您不启动BroadcastReceivers。您启动服务,这是长期的后台进程。您注册BroadcastReceivers以通知特殊事件(如BOOT_COMPLETED)。当您注册的事件之一发生时,它将创建该类的实例并调用其onReceive。

希望能够解决问题。如果没有,我建议你重读有关服务和广播接收器的一些教程,你似乎有两个困惑。

答案 2 :(得分:1)

startService调用只会启动一个服务。这里的MyScheduleReceiver是一个广播接收器。要触发广播接收器,通常必须发送广播而不是调用startService。

答案 3 :(得分:0)

要开始广播,您需要发送不是startService()

的广播

添加此代替startService(new Intent(this, MyScheduleReceiver.class));

Intent intent = new Intent();
intent.setAction("pakagename.MyScheduleReceiver");
sendBroadcast(intent); 

我希望它有所帮助。