Android中BroadCastReceiver使用

来源:互联网 发布:网络程琳个人资料 编辑:程序博客网 时间:2024/06/11 05:18
1.在Android中BroadcastReceiver作为Android四大组件之一,不像Activity,没有可显示的界面。BroadcastReceiver包括两个概念,广播发送者和广播接收者(Receiver),这里的广播实际就是指Intent,程序可以自己发送广播自己接收,也可以接受系统或其他应用的广播或是发送广播给其他应用程序,BroadcastReceiver是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件,接受全局事件的响应,首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。

  当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。

2.注册BroadcastReceiver有两种方式

    静态注册:在AndroidManifest.xml中用标签生命注册,并在标签内用标签设置过滤器

   <receiver android:name="ChildReceiver">    //继承BroadcastReceiver,重写onReceiver方法

    <intent-filter>    

      <action android:name="zhengnengliang"></action> 

      </intent-filter>

  </receiver> 


  动态注册:

  IntentFilter intentFilter = new IntentFilter();

  intentFilter.addAction(String);   //为BroadcastReceiver指定action,使之用于接收同action的广播

         registerReceiver(BroadcastReceiver,intentFilter);

  其中注册和取消注册广播放在了OnResume和OnPause函数中可以有效的节省系统消耗。如果希望广播一直运行中可以在Activity的OnCreate函数中注册,在OnDestrory函数中取消注册。

3.生命周期

BroadcastReceiver在onReceive函数执行结束后即表示生命周期结束,所以不适合在onReceive中做绑定服务操作,结束后若某个进程只含有该BroadcastReceiver,则优先级将降低可能被系统回收,所以BroadcastReceiver中不适合做一些异步操作,如新建线程下载数据,BroadcastReceiver结束后可能在异步操作完成前进程已经被系统kill。
同时由于ANR限制BroadcastReceiver的onReceive函数必须在10秒内完成,而且onReceive默认会在主线程中执行,所以BroadcastReceiver中不适合做一些耗时操作,对于耗时操作需要交给service处理,比如网络或数据库耗时操作、对话框的显示

4.系统广播,配置权限

    <action android:name="android.intent.action.BOOT_COMPLETED"/>//开机广播动作

<action android:name="android.intent.action.ACTION_SHUTDOWN"/> //关机广播动作

来电广播监听

实现手机电话状态的监听,主要依靠两个类:TelephoneManger和PhoneStateListener。 TelephonseManger提供了取得手机基本服务的信息的一种方式。因此应用程序可以使用TelephonyManager来探测手机基本服务的情况。应用程序可以注册listener来监听电话状态的改变。我们不能对TelephonyManager进行实例化,只能通过获取服务的形式: 
主要静态成员常量:(它们对应PhoneStateListener.LISTEN_CALL_STATE所监听到的内容)
int CALL_STATE_IDLE   空闲状态,没有任何活动。
int CALL_STATE_OFFHOOK  摘机状态,至少有个电话活动。该活动或是拨打(dialing)或是通话,或是 on hold。并且没有电话是ringing or waiting
int CALL_STATE_RINGING  来电状态,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间

0 0
原创粉丝点击