当前位置: 代码迷 >> Android >> 程序退出后,无法接收系统广播了,请帮忙看看,多谢
  详细解决方案

程序退出后,无法接收系统广播了,请帮忙看看,多谢

热度:10   发布时间:2016-04-28 04:30:11.0
程序退出后,无法接收系统广播了,请帮忙看看,谢谢。
本帖最后由 qyshooter 于 2014-07-24 17:55:31 编辑
我做了一个应用,包含一个定时查询功能,使用的是系统的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?);

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

auto_inquiry 是我自己写的个名字,收到广播后好识别广播来源。
我启动了循环的AlarmManager后,应该可以不用再自己去发消息了吧?


你的AlarmManager是在哪里起的?是不是程序退出了,就把这个停止了,你是在这里发广播的?


这样的,程序启动的时候,就启动了一个服务,然后在这个服务中启动的AlarmManager。后来程序和服务都退出了。但是我的理解是,我启动的是重复的AlarmManager,启动一次后,应该就不用我管了,系统会定期把广播发给我。


你程序退出后,看看设置里的应用,是否正在运行,如果没有在运行,那你这个AlarmManager也就停止了


应用和服务都没有运行了,因此AlarmManager停止了对吧?我以为用的是系统的Alarm Service,所以系统接管了,到时间的时候会通过intent启动我这个应用也。


那就已经停止了,你可以开个service一直开着,在service里发广播
  相关解决方案