您好我正在开发我正在定义一个广播接收器的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”。实际上,当我打电话给我的服务时,我想做的就是我的服务必须启动,
我做错了什么。如何解决这个问题?
答案 0 :(得分:3)
这里发生的实际情况是,您可以在开始活动时盯着广播接收器,并且此广播接收器开始监听BOOT_COMPLEATED正在发生与否。当这种情况发生时,就会发生这种情况。如果您需要在后台启动进程,可以使用BroadcastReciever的服务。 BroadcastRecievers用于监听某些事件的发生。通过这个,它会帮助你
答案 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);
我希望它有所帮助。