BroadcastReceiver的使用简介

来源:互联网 发布:淘宝宝贝排名 编辑:程序博客网 时间:2024/05/22 00:34

尽量用代码进行BroadcastReceiver的注册,因为在用完之后方便关闭注册。 在AndroidManifest中进行注册后,不管改应用程序是否处于活动状态,都会进行监听,比如某个程序时监听 内存 的使用情况。所以关闭无必要的监听可以使程序更好。
首先声明:

private QueryStationsResultReceiver mQueryStationsResultReceiver;//自定义的BroadcastReceiverprivate IntentFilter mQueryStationsResultIntentFilter;

定义继承BroadcastReceiver 的类

public class QueryStationsResultReceiver extends BroadcastReceiver {        private boolean mResult;        private String mErrorCode;        private String mInfo;        public QueryStationsResultReceiver() {            mResult = false;        }//此方法用来接收广播信息        @Override        public void onReceive(Context context, Intent intent) {

在fragment初次加载时,初始化intentFilter和broadcaster

public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //IntentFilger里的参数为action标识        mQueryStationsResultIntentFilter = new IntentFilter(QueryDataIntentService.QUERY_STATIONS_RESULT_INTENT);        mQueryStationsResultReceiver = new QueryStationsResultReceiver();     

下面当要用到广播时,进行广播的注册

//此处进行广播注册,两个参数分别为receiver和filter,将receiver和action绑定,用来指定接收哪个广播,getActivity().registerReceiver(mQueryStationsResultReceiver, mQueryStationsResultIntentFilter);//调用service进行数据查询QueryDataIntentService.startActionQueryStations(getActivity(), username, passwd, mRegionId);

查询完数据,在service处发送广播

  @Override    protected void onHandleIntent(Intent intent) {    Intent resultIntent = new Intent(QUERY_STATIONS_RESULT_INTENT);//设置intent的action     sendBroadcast(resultIntent);//把intent发送

这时onReceive方法回监听到匹配action的广播

registerReceiver(mQueryStationsResultReceiver, mQueryStationsResultIntentFilter);//重点是这句注册时候指定了哪个action匹配哪个receiver

最后在查询完数据之后我们需要关闭receiver不用再监听了

 getActivity().unregisterReceiver(mQueryStationsResultReceiver);

最后说明:QUERY_STATIONS_RESULT_INTENT这个在service里定义的全局静态变量是一个action,作为发送和接收的重要标识。

1 0
原创粉丝点击