Android四大组件之Broadcast(广播接收BroadcastReceiver)
2015-09-02 18:01
831 查看
●广播Broadcast 是全局事件,发送后任务结束,发送出的事件针对整个设备有效。
Broadcast发送的广播有两种形式 :
1,系统发送的广播,针对全部应用程序
2,应用程序发送的广播, 一般只是应用程序中的Receiver来接收
广播发送时会有一个String用来标识这条广播==>action
发送广播 :
接收广播 BroadcastReceiver
定义广播接收器
//案例:是系统短信广播:
注意:广播接收时注册 BroadcastReceiver两种方式:
第一种:java 代码注册(该java代码执行期间有效)
一般在Activity的onCreate中进行注册 :
private void registerR() {
BroadcastReceiver receiver = new Mybriadcastreceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("广播的String类型的标识action")
filter.addAction("广播的String类型的标识action")//如果有发送了两条广播就要注册两条广播
registerReceiver(receiver , filter) ;
}
但是最后需要在Activity的onDestroy()中取消注册:
unregisterReceiver(receiver) ;
第二种:AndroidManifest中注册(Receiver在设备启动过程中一直能接收广播,一般用于手机系统的广播接受,比如:短信,电话,闹铃等)
<receiver android:name="Receiver类的路径">
<intent-filter>
<action android:name="广播的String类型的标识action" />
<action android:name="广播的String类型的标识action2" />
</intent-filter>
</receiver>
●广播分为有序广播和无序广播
其中有序广播发送sendOrderBroadcast(),可以通过abortBroadcast取消广播的继续发送。
●接收短信,系统短信是有序广播
manifest.xml中注册
<receiver android:name="com.example.receiver.ReceiverSms">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
Broadcast发送的广播有两种形式 :
1,系统发送的广播,针对全部应用程序
2,应用程序发送的广播, 一般只是应用程序中的Receiver来接收
广播发送时会有一个String用来标识这条广播==>action
发送广播 :
Intent bcIntent = new Intent() ;
bcIntent.setAction("actionString") ;
bcIntent.putExtra("bc", bc);//存入数据,在广播接收的时候可以取出(也可以不传值)
sendBroadcast(bcIntent) ;//发送广播
接收广播 BroadcastReceiver
定义广播接收器
class Mybroadcastreceiver extends BroadcastReceiver{ @Override onReceive(Context context , Intent intent){ String action = intent.getAction();//取出发送广播时存放的action用于效验是否是需要的广播 String str = arg1.getStringExtra("bc");//取出发送广播时存放的数据 } }
//案例:是系统短信广播:
public class ReceiverSms extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { SmsMessage msg = null; Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdusObj = (Object[]) bundle.get("pdus"); for (Object p : pdusObj) { msg = SmsMessage.createFromPdu((byte[]) p); // 得到消息的内容 String msgTxt = msg.getMessageBody(); // 时间 Date date = new Date(msg.getTimestampMillis()); SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); String receiveTime = format.format(date); // 短信发送者 String senderNumber = msg.getOriginatingAddress(); Toast.makeText(context, "来短消息了!", Toast.LENGTH_LONG).show() ; } } } }
注意:广播接收时注册 BroadcastReceiver两种方式:
第一种:java 代码注册(该java代码执行期间有效)
一般在Activity的onCreate中进行注册 :
private void registerR() {
BroadcastReceiver receiver = new Mybriadcastreceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("广播的String类型的标识action")
filter.addAction("广播的String类型的标识action")//如果有发送了两条广播就要注册两条广播
registerReceiver(receiver , filter) ;
}
但是最后需要在Activity的onDestroy()中取消注册:
unregisterReceiver(receiver) ;
第二种:AndroidManifest中注册(Receiver在设备启动过程中一直能接收广播,一般用于手机系统的广播接受,比如:短信,电话,闹铃等)
<receiver android:name="Receiver类的路径">
<intent-filter>
<action android:name="广播的String类型的标识action" />
<action android:name="广播的String类型的标识action2" />
</intent-filter>
</receiver>
●广播分为有序广播和无序广播
其中有序广播发送sendOrderBroadcast(),可以通过abortBroadcast取消广播的继续发送。
●接收短信,系统短信是有序广播
manifest.xml中注册
<receiver android:name="com.example.receiver.ReceiverSms">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
相关文章推荐
- Android开发---图片渲染问题----真的很严重
- Android中三种锁的用法
- Android NDK——监听USB的连接与断开
- android界面优化技巧
- android-19 编译导致aapt.exe 停止工作
- Android的一些异常汇总
- Android插件实例——360 DroidPlugin详解
- Android-自定义反色圆角Button
- Android Wifi 状态监控
- Android中如何实现文件下载
- 在Android开发中替换资源图片不起作用的解决方法
- Android Studio快捷键
- Android拨打电话 java.lang.SecurityException: Permission Denial
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- Android 绘制圆形进度条
- 使用 Android 自带的 proguard 混淆源码
- Android Studio中Gradle使用详解
- Android文件的下载
- Android项目中如何用好构建神器Gradle?
- Android PhoneGap 利用 Activity 实现 CordovaInterface