Android Receiver 相关

【2014年3月5日】

android 四大组件之一的BroadcastReceiver。

注册分两种,一种是AndroidManifest.xml里注册,一种是java程序里动态注册。

一.AndroidManifest.xml里注册:

无论你的apk是否在运行,你都能收到这个广播。这样的话需要你的代码里处理这种情况,如果收到广播,你的程序没有运行,导致许多变量未赋值,可能会引起空指针,特别注意。

注册方法:AndroidManifest.xml里加上。

<receiver 

           android:name="com.hisense.multiscreen.Receiver.MyReceiver"
            android:label="@string/app_name">
        <intent-filter>       

        <action android:name="are.you.ready" />

<!--你的广播名-->

        </intent-filter>
        </receiver>

二.动态注册

只有在你的程序在运行时才会接收到广播。

注册方法:

MyReceiver mReceiver = new MyReceiver();
IntentFilter mFilter = new IntentFilter"are.you.ready");
mContext.registerReceiver(mReceiver, mFilter);

当apk退出时,需要你手动注销掉,否则会报错。

mContext.unregisterReceiver(mReceiver);
mReceiver = null;

【注意】此处的mContext需要前后一致。即,假如你用的是application的context注册的,你就得用application的context注销;假如你用的是activity的context注册的,你就得用此activity的context注销掉。context不能混用,否则会报错。

三.一些特殊的系统广播,需要加上部分修饰。

如"android.intent.action.PACKAGE_ADDED"等通知应用变化的广播,需要如下注册:

PackageChangeReceiver pcReceiver = new PackageChangeReceiver();
IntentFilter pFilter = new IntentFilter();
pFilter.addAction("android.intent.action.PACKAGE_ADDED");
pFilter.addDataScheme("package");
mContext.registerReceiver(pcReceiver, pFilter);

四.定义的Receiver里不能做耗时的操作,否则会提示ANR。

五.如果你的apk动态注册了网络变化的广播:"android.net.conn.CONNECTIVITY_CHANGE"

那么【有网络情况下】每次启动的时候你都会收到3次这样的广播,之前两次是没网络的,第三次是有网络的。

在AndroidManifest.xml里好像没这事,没详查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值