0

嗨,我正在开发 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

4 回答 4

3

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

服务

广播接收器

于 2013-04-02T04:18:53.897 回答
1

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

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

希望这可以解决问题。如果没有,我建议你重读一些关于服务和广播接收器的教程,你似乎把两者混淆了。

于 2013-04-02T04:16:19.207 回答
1

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

于 2013-04-02T04:17:10.377 回答
0

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

添加这个而不是startService(new Intent(this, MyScheduleReceiver.class));

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

我希望它有所帮助。

于 2013-04-02T04:22:49.733 回答