Context
1. Context是用来访问全局信息的接口
2. Context可以做组件之间信息的共享
BroadcastReceiver (广播接收者)
Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件.但是广播本身并不知道有多少人在关注自己.Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁.
本质是一个系统全局的监听者,
用于监听系统全局的广播消息,
非常方便地实现系统中不同组件之间的通信.
一个应用也可以发送出广播.
通过广播中的关键字段,系统将寻找所有关注这个广播的应用,并触发他们注册的Receiver.
BroadcastReceiver 用来监听广播
向系统注册自己关心的广播,当广播发出后,系统会带起进程并调用指定的方法去执行代码.
如果onReceive(..)方法不能在10秒内完成,Android会认为该程序无响应(ANR),所以不要在此方法中执行耗时的操作.
如果确定需要根据Broadcast来完成一项比较耗时的操作,则考虑通过Intent启动一个Service来完成.
广播的两种类型
无序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,并且是没有先后顺序(同时收到)有序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,但是会按照广播接收者的优先级来决定接收的先后顺序优先级的定义:-1000~1000最终接收者:所有广播接收者都接收到广播之后,它才接收,并且一定会接收abortBroadCast:阻止其他接收者接收这条广播,类似拦截,只有有序广播可以被拦截
1.创建BroadcastRecevier: new -> other -> BoradcastReceiver 创建后AndroidManifest.xml
public class MyReceiver extends BroadcastReceiver {
//此函数是用来接收,如果此函数10秒内不能完成,Android会认为该程序无响应,所以不要在此方法中之执行耗时操作
@Override
public void onReceive(Context context, Intent intent) {
System.
out
.println("接收到了消息, 消息的内容是 : "+intent.getStringExtra("data"));
abortBroadcast
()
;
//此方法是优先级高Receiver不想让比自己优先级低的Receiver接收广播
注意: BoradcastReceiver 创建后AndroidManifest.xml中会自动生成receiver标签
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter
android
:priority=
"9"
> //优先级值越大,那么优先级越高
<action
android
:name=
"com.sahara.learnbroadcastreceiver.intent.action.myReceiver"
/>
</intent-filter>
</receiver>
// 发送广播的方法
//Intent i = new Intent(this,MyReceiver.class);
Intent i =
new
Intent(
MyReceiver
.
ACTION
)
;
i.putExtra("data","Hello Sahara!");
sendBroadcast(i); //常规发送广播的方法
sendOrderedBroadcast
(i
,null
)
;
//这个方法发送的广播可以使用
abortBroadcast
(); 函数拦截
//注册广播
if
(
receiver
==
null
){
receiver
=
new
MyReceiver()
;
registerReceiver(
receiver
,new
IntentFilter(MyReceiver.
ACTION
))
;
}
//注销广播
if
(
receiver
!=
null
){
unregisterReceiver(
receiver
)
;
receiver
=
null;
}
//接收广播的方法
常见的系统广播Action常量:
ACTION_TIME_CHANGED 系统时间被改变
ACTION_DATE_CHANGED 系统日期被改变
ACTION_TIMEZONE_CHANGED 系统时区被改变
ACTION_BOOT_COMPLETED 系统启动完成
ACTION_BATTERY_CHANGED 电池电量改变
ACTION_BATTERY_LOW 电池电量低
ACTION_POWER_CONNECTED 系统连接电源
ACTION_POWER_DISCONNECTED 系统与电源断开
ACTION_SHUTDOWN 系统被关闭
接收短信广播
当手机接到一条短息的时候, 系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,
广播里携带着短信相关的所有数据.
每个应用程序都可以在广播接收器里对它进行监听,收到广播时从中解析出短信的内容即可.
注意添加权限. <uses-permission android:name="android.permission.RECEIVE_SMS/>
发送短信
添加权限 <uses-permission android:name="android.permisssion.SEND_SMS/>
获得SmsManager对象
使用方法sendTextMessage
如果希望得到发送短信是否成功
定义内部类,继承于BroadcastReceiver
注册广播