andorid4.4.2,收不到系统广播(时间,wifi,usb插拔等)

运行启动主activity后,启动一个服务去注册这些广播,收到广播去更新时间等;第一次运行时,主界面还能接受到广播,跳转到别的页面再返回,就收不到这些广播了,需要重启才行,但是此时跳转到其他页面都还能收到这些广播,问下各位,这个问题如何解决呢,先谢谢帮忙的兄弟了。

还有,你广播可以使用静态注册,也就是注册到AndroidManifest.xml文件里

你注册广播的时候,可以注册到Application里

图片说明

静态注册
依然以上面的代码为例:我们把动态注册换成静态注册,打开清单文键,在application节点中加上节点:

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="SendNotify"></action>
    </intent-filter>
</receiver>

再次运行程序,这里就不再加图片了,因为效果和上面的图片一模一样.

系统广播
为了避免繁琐,我们依旧使用动态注册的代码。android系统为我们提供了很多系统的广播,例如:低电量时的提醒,关机提醒等等,我们在这里使用usb连接手机时发送广播,我们使用静态注册的方式来实现,在上面的静态注册中,我们依旧使用MyReceiver作为接受者,在清单文件中,我们把节点中的name改成系统广播的名称:

<receiver android:name=".reciver.MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED"></action>
    </intent-filter>
</receiver>

然后在广播接受者中过滤这个系统广播:

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if("SendNotify".equals(intent.getAction())){
        Toast.makeText(context, "收到广播---->>>>"+intent.getStringExtra("you"), Toast.LENGTH_SHORT).show();
    }else if(Intent.ACTION_POWER_CONNECTED.equals(intent.getAction())){//接受系统广播
        Toast.makeText(context, "充电器连接了", Toast.LENGTH_SHORT).show();
    }
}

}
这里我们并没有去掉上一个广播的过滤,所以我们两个广播都会收到,再次运行,看效果:

这里写图片描述

我们在插上数据线的时候就会触发这个广播…

是不是你的服务出问题了导致广播被注销,你直接在activity中注册呢

是不是使用了baseactivity,并且在onstop中解绑操作了