我做了一个应用,包含一个定时查询功能,使用的是系统的Alarm_Service。
但是我发现如果我的程序在前台运行,那么就可以定时接收到广播,如果退出了,或者被系统杀死了,就不能再接收广播了。
不能在程序退出后继续接收广播吗?
相关代码如下:
1、启动一个Service,在Service中启动定时器。 (其实我觉得不用Service也可以):
// 启动一个重复闹钟,从现在开始,每5分钟超时一次,进行自动查询
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
String ALARM_ACTION = "auto_inquiry";
Intent intentToFire = new Intent(ALARM_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 5*60000, pendingIntent);
2、定义一个Reserver类来接收消息,进行查询操作,现在调试就是写一个日志。程序退出后,我就再也没有看到写日志了。
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d(TAG, action);
if (0 != action.compareTo("auto_inquiry")){
return;
}
logFile(context);
}
3、manifest.xml中定义:
<receiver android:name="com.example.expresstracer.TraceReceiver"
android:permission="auto_inquiry" >
<intent-filter>
<action android:name="auto_inquiry" />
</intent-filter>
</receiver>
------解决方案--------------------
如果应用退出了或者终止了,服务都没有了,就不能定时发出广播,当然就不能收到广播了。broadcastreceiver在静态注册的情况下,应用未运行也能接收到广播,这里我觉得不是broadcastreceiver的问题。
------解决方案--------------------
auto_inquiry 是什么的action?我怎么百度不到
------解决方案--------------------
<receiver android:name="com.example.expresstracer.TraceReceiver"
android:permission="auto_inquiry" >
<intent-filter>
<action android:name="auto_inquiry" />
</intent-filter>
</receiver>
这俩东西是啥?
------解决方案--------------------
至少要一个后台服务长期运行用以接收广播啊
------解决方案--------------------
不是应该这么写吗:
Intent intentToFire = new Intent(this, 你的Receiver.class);
intentToFire.setAction(ALARM_ACTION?);
------解决方案--------------------
那就已经停止了,你可以开个service一直开着,在service里发广播