什么是BroadcastReceiver
BroadcastReceiver是Android体系的四大组件之一,本质上是一种全局的监听器,用于监听系统全局的广播消息,正式因为其本质为全局监听,因此可以非常方便的实现系统中不同组件之间的通信。也方便我们自己的app针对系统开机、电量低等广播做出相应反映。同时我们也可以自己发送广播,来实现不同组件之间的通信
系统接收短信广播,然后弹出Toast:
package cn.lixyz.broadcastreceiver; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends Activity { private IntentFilter filter; private SMSReceiver sms; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); sms = new SMSReceiver(); registerReceiver(sms, filter); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); unregisterReceiver(sms); } class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "有短信", Toast.LENGTH_SHORT).show(); Log.d("TTTT", "~~~~~~~"); } } }
MainActivity.java
还需要添加权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
运行结果:
Android的大量系统事件都会对外发送广播,下面是常见的广播常量:
ACTION_TIME_CHANGED 系统时间被改变
ACTION_DATE_CHANGED 系统日期被改变
ACTION_TIMEZONE_CHANGED 系统时区被改变
ACTION_BOOT_COMPLETED 系统启动完成
ACTION_PACKAGE_ADDED 系统添加包
ACTION_PACKAGE_CHANGED 系统的包改变
ACTION_PACKAGE_REMOVED 系统的包被删除
ACTION_PACKAGE_RESTARTED 系统的包被重启
ACTION_PACKAGE_DATA_CLEARED 系统的包数据被清空
ACTION_BATTERY_CHANGED 电池电量改变
ACTION_BATTERY_LOW 电池电量低
ACTION_POWER_CONNECTED 系统连接电源
ACTION_POWER_DISCONNECTED 系统与电源断开
ACTION_SHUTDOWN 系统被关闭
Broadcast的分类
广播分为标准广播和有序广播
标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎在同一时间都会接收到这条广播,没有顺序可言,这种广播效率高,但无法截断。
有序广播则是一种同步执行的广播,在广播发出后,同一时刻只会有一个广播接收器能够接收到这条广播消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。优先级高的广播接收器可以先接收到,并且可以截断广播,广播被截断后,后面的广播接收器就无法再接收到了。