Android自学笔记-17-广播接收者(BroadcastReceiver)
2014-04-30 23:12
459 查看
广播接收者是Android的四大组件之一,对于这个的定义也是很贴切,在Android系统中,当系统发生了一些状态的改变,系统会向所有的程序广播这个状态的变化。但是这些广播不是所有的我们都接收的,我们只会接收我们关注的广播,这里可以类比广播台,许多个广播台都在发送着不同的广播,我们可以用收音机根据调频接收我们想要听的广播,这里广播台发送的不同的广播,就相当于Android中发送的不同广播,这里的收音机就相当于我们的程序,我们通过设置我们的程序,就能接收到对应的广播。
对于广播接收者,我们想要使用它需要按照如下步骤:
1 自定义一个类并且继承BroadcastReceiver类,实现onReceive方法,这个方法会在接收到广播的时候调用
1 在AndroidMainfest.xml注册该BroadcastReceiver,并且配置相应的参数
下面定义一个广播接收者用于接收短信到来的广播,首先创建一个java类:
然后在AndroidMainfest.xml注册该BroadcastReceiver,
无序广播所有的广播接收者都可以接收到 有序广播会按照接收者优先级的顺序挨个的接收到,接收者可以使用abortBroadcast();方法随时停止该广播的继续传递既然有广播的接收者,那么一定也有广播的发送者,在Android发送广播也是需要使用Intent,首先使用Intent创建一个意图,然后使用sendBroadcast(无序广播)或者sendBroadcast(有序广播)方法将广播发送出去。看下面例子代码,创建了两个广播,并且按照两种方式发送出去了。
MyBroadcastReceiver.java
MyBroadcastReceiver1.java
MyBroadcastReceiver2.java
对于有序广播来说MyBroadcastReceiver2并不会接收到该广播,因为MyBroadcastReceiver1的优先级比较高,所以广播先呗MyBroadcastReceiver1接收到,并且MyBroadcastReceiver1在接收到后处理完调用了abortBroadcast方法,中断了广播的继续传播,所以优先级小MyBroadcastReceiver2并不能接收到该广播。
例子代码下载地址:http://download.csdn.net/detail/mengxiangyue/7278217
对于广播接收者,我们想要使用它需要按照如下步骤:
1 自定义一个类并且继承BroadcastReceiver类,实现onReceive方法,这个方法会在接收到广播的时候调用
1 在AndroidMainfest.xml注册该BroadcastReceiver,并且配置相应的参数
下面定义一个广播接收者用于接收短信到来的广播,首先创建一个java类:
import java.text.SimpleDateFormat; import java.util.Date; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsMessage; public class SmsReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Object[] pdus = (Object[]) intent.getExtras().get("pdus"); for (Object pdu : pdus) { //创建一个短信 SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu); //获取发送手机号 String address = sms.getOriginatingAddress(); //获取短信的内容 String body = sms.getMessageBody(); //获取短信的时间 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(sms.getTimestampMillis())); System.out.println(time); System.out.println(address); System.out.println(body); } //中断手机接收操作 abortBroadcast(); } }
然后在AndroidMainfest.xml注册该BroadcastReceiver,
<receiver android:name=".SmsReceiver"> <intent-filter android:priority="999"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>对于广播分为两种:有序广播和无序广播,
无序广播所有的广播接收者都可以接收到 有序广播会按照接收者优先级的顺序挨个的接收到,接收者可以使用abortBroadcast();方法随时停止该广播的继续传递既然有广播的接收者,那么一定也有广播的发送者,在Android发送广播也是需要使用Intent,首先使用Intent创建一个意图,然后使用sendBroadcast(无序广播)或者sendBroadcast(有序广播)方法将广播发送出去。看下面例子代码,创建了两个广播,并且按照两种方式发送出去了。
package com.mxy; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } /** * 无序广播所有的广播接收者都可以接收到 * 有序广播会按照接收者优先级的顺序挨个的接收到,接收者可以随时停止该广播的继续传递 * @param view */ public void click(View view) { Intent intent = new Intent(); intent.setAction("com.mxy.broadcastReceiver"); intent.putExtra("data", "测试数据"); this.sendBroadcast(intent); Intent intent1 = new Intent(); intent1.setAction("com.mxy.OrderedBroadcastReceiver"); intent1.putExtra("data", "测试数据"); this.sendOrderedBroadcast(intent1, null); } }下面看一下AndroidMainfest.xml中的相关配置:
<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.mxy.broadcastReceiver"></action> </intent-filter> </receiver> <receiver android:name=".MyBroadcastReceiver1"> <intent-filter android:priority="1000"> <action android:name="com.mxy.OrderedBroadcastReceiver"></action> </intent-filter> </receiver> <receiver android:name=".MyBroadcastReceiver2"> <intent-filter android:priority="10"> <action android:name="com.mxy.OrderedBroadcastReceiver"></action> </intent-filter> </receiver>由上面可以看出无序广播由MyBroadcastReceiver接收,有序广播由MyBroadcastReceiver1和MyBroadcastReceiver2接收,但是他们两个的优先级不同,下面是这三个类的代码:
MyBroadcastReceiver.java
package com.mxy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i("mxy", "获取到data=" + data ); } }
MyBroadcastReceiver1.java
package com.mxy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBroadcastReceiver1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i("mxy", "MyBroadcastRecevier1获取到data=" + data ); //停止广播了 abortBroadcast(); } }
MyBroadcastReceiver2.java
package com.mxy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBroadcastReceiver2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i("mxy", "MyBroadcastRecevier2获取到data=" + data ); } }
对于有序广播来说MyBroadcastReceiver2并不会接收到该广播,因为MyBroadcastReceiver1的优先级比较高,所以广播先呗MyBroadcastReceiver1接收到,并且MyBroadcastReceiver1在接收到后处理完调用了abortBroadcast方法,中断了广播的继续传播,所以优先级小MyBroadcastReceiver2并不能接收到该广播。
例子代码下载地址:http://download.csdn.net/detail/mengxiangyue/7278217
相关文章推荐
- Android(java)学习笔记176:BroadcastReceiver之 短信发送的广播接收者
- Android(java)学习笔记177:BroadcastReceiver之 应用程序安装和卸载 的广播接收者
- Android 开发笔记三 BroadcastReceiver 广播接收者
- Android(java)学习笔记175:BroadcastReceiver之 外拨电话的广播接收者
- Android笔记(五):广播接收者(Broadcast Receiver)
- android广播接收者BroadcastReceiver
- Android四大组件之广播接收者(BroadcastReceiver)
- Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)
- Android:BroadcastReceiver:采用广播接收者实现短信窃听器
- Android中广播接收者BroadcastReceiver的理解与基本使用
- Androidc学习笔记三之BroadcastReceiver广播接收器及单双页模式
- Android中的BroadCastReceiver(广播接收者)
- Android中广播接收者BroadcastReceiver详解
- Android BroadCastReceiver 广播接收者使用
- Android四大组件之一:BroadcastReceiver(广播接收者)
- android开发 - BroadcastReceiver 广播接收者
- Android四大组件BroadcastReceiver 广播接收者
- Android:BroadcastReceiver:采用广播接收者拦截外拔电话、发送广播、其他常用广播、特性
- android—广播接收者BroadcastReceiver的应用开发范例
- Android四大组件之一:BroadCastReceiver(广播接收者)