黑马66期android学习笔记 day7_Broadcast Receiver学习笔记
来源:互联网 发布:编程教程学习 编辑:程序博客网 时间:2024/04/30 01:32
一、广播(Broadcast Receiver)的介绍
Broadcast Receiver是Andriod四大组件之一(Activity,Service,Broadcast Receiver,Content Providers),主要是用于广播消息和接受消息。例如:系统在运行过程中,会发生很多事件,系统为了让其他应用知道系统发生了这个事件,会发送一个对应该事件的广播,比如:电量改变、收到短信、拨打电话、屏幕解锁、系统开机,应用只要注册一个广播接收者,就可以接收到系统发出的广播。
二、广播(Broadcast Receiver)的创建。
1、注册广播有两种方式(静态注册,动态注册)(接受发送过来的信息)
a、静态注册:
第一步:创建一个java类型,继承BroadcastReceiver。
public class CallReceiver extends BroadcastReceiver {//收到广播时调用@Overridepublic void onReceive(Context context, Intent intent) {//取出广播中的号码String number = getResultData();String newNumber = "17951" + number;//把修改后的号码放入广播中setResultData(newNumber); //拦截是无效的abortBroadcast();}}
第二步:在清单文件(AndroidManifest.xml)中配置Receiver的标签
<receiver android:name="com.itheima.ipdialer.CallReceiver"> <intent-filter > <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver>
b.动态注册
第一步:创建一个java类型,继承BroadcastReceiver。(同上)
第二步:使用代码直接注册
IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(String); //为BroadcastReceiver指定action,使之用于接收同action的广播 registerReceiver(BroadcastReceiver,intentFilter);
2、广播的两种事件(系统广播,自定义广播)(主动发送的信息)
1、系统广播,比如:ACTION_BOOT_COMPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。
2、自定义广播(有序的广播,无序的广播)
a、有序的广播,通过sendOrderedBroadcast方法发送,根据BroadcastReceiver中的配置的android:priority="1000"来设置优先级,值越大越先获取,值取值范围【-1000,1000】,可以通过调用abortBroadcast()方法,进行拦截,不在继续广播。通过调用setResultData方法进行,设置值。
b.无序的广播,通过调用sendBroadcast方法进行发送,所有注册的,同时获取到。通过调用setResultData方法进行,设置值。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ Intent intent = new Intent(); intent.setAction("a.b.c");//自定义action名称 //发送自定义无序广播 sendBroadcast(intent); } }
理解:广播实际上就是由系统广播或自定义广播通过将要发送的信息和用于过滤的信息(如:action,data,category等)封装在Intent对象中,通过调用sendOrderBroadcast()或
sendStickyBroadcast()等方法将Intent的发送出去。当Intent发送过后,所有已注册的
BroadcastReceiver会通过IntentFilter中信息与该Intent比对,如果一致就调用该BroadcastReceiver
的onReceive(Context context, Intent intent) 方法。
案例一、Ip拦截器(系统广播,这个是无序的广播)
public class CallReceiver extends BroadcastReceiver {//收到广播时调用@Overridepublic void onReceive(Context context, Intent intent) {//取出广播中的号码String number = getResultData();String newNumber = "17951" + number;//把修改后的号码放入广播中setResultData(newNumber); //拦截是无效的abortBroadcast();}}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.ipdialer" android:versionCode="2" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itheima.ipdialer.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.itheima.ipdialer.CallReceiver"> <intent-filter > <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver> </application></manifest>
案例二、短信拦截器(系统有序的广播)
public class SmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//取出短信内容Bundle bundle = intent.getExtras();//数组中的每一个元素,就是一条短信Object[] objects = (Object[]) bundle.get("pdus");for (Object object : objects) {//把数组中的元素转换成短信对象SmsMessage sms = SmsMessage.createFromPdu((byte[]) object);//获取对方号码String address = sms.getOriginatingAddress();//获取短信内容String body = sms.getMessageBody();System.out.println(address + ";" + body);if("13888".equals(address)){//拦截短信abortBroadcast();}}}}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.smslanjie" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itheima.smslanjie.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.itheima.smslanjie.SmsReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application></manifest>
- 黑马66期android学习笔记 day7_Broadcast Receiver学习笔记
- 黑马66期android学习笔记 day6_Activity学习笔记
- 黑马66期android学习笔记 day7_Service学习笔记
- 黑马66期android学习笔记 day1_快速入门笔记
- 【Android学习笔记】Broadcast receiver
- 黑马66期android学习笔记02-Android简单历史
- 黑马66期android学习笔记03-Android体系结构
- 黑马66期android学习笔记01-手机制式
- 黑马66期android学习笔记05-SDK的获取
- 黑马66期android学习笔记07-13视频
- 黑马66期android学习笔记18_dp和px
- Android学习笔记之Broadcast Receiver
- 黑马66期android学习笔记04-Dalvik VM和JVM的比较
- 黑马66期android学习笔记06-SDK的目录结构
- 黑马66期android学习笔记14-电话拨号器定义布局&获取组件对象
- 黑马66期android学习笔记16_按钮点击事件
- 黑马66期android学习笔记17_短信发送器
- Android学习开发笔记之一短信拦截Receiver
- javaScript读取页面表格中每个单元到EXCEL中
- 7_14:自动变量潜在问题
- 重装和重装后该怎么办(通用版)
- spring与servlet集成开发对象管理问题解决方法
- 文件搜索命令
- 黑马66期android学习笔记 day7_Broadcast Receiver学习笔记
- 权限管理设计
- vi命令及用法
- Cocos2dx-- 聊天系统之富文本(RichText)与字体对齐
- java设计模式之单例模式
- Ensemble(Cache)通过ODBC连接Mysql数据库并调用其存储过程
- 关于weblogic下使用URL.openConnection获取连接返回javax.net.ssl.SSLKeyException错误
- 漂亮的CSS3圆角按钮组合DEMO演示
- Java概况