asasasdasfaf
caolin-tech
2018-01-02 09:22
采纳率: 75%
浏览 1.1k
已采纳

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

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

6条回答 默认 最新

  • Jeff_YaoJie
    香言香语 2018-01-02 09:27
    已采纳

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

    点赞 评论
  • Jeff_YaoJie
    香言香语 2018-01-02 09:25

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

    点赞 评论
  • asasasdasfaf
    caolin-tech 2018-01-02 09:34

    图片说明

    点赞 评论
  • Jeff_YaoJie
    香言香语 2018-01-02 09:58

    静态注册
    依然以上面的代码为例:我们把动态注册换成静态注册,打开清单文键,在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();
        }
    }
    

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

    这里写图片描述

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

    点赞 评论
  • bdmh
    bdmh 2018-01-02 11:40

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

    点赞 评论
  • u013835855
    山洼之神 2018-01-03 01:02

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

    点赞 评论

相关推荐