您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 移动设备软件应用开发第9章
第9章Android广播简介BroadcastReceiver(广播接收者)为Android的四大组件之一,主要用来接收广播Intent。在Android中,广播是一种广泛运用在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的广播,进行过滤接收并响应的一类组件。9.1Android广播机制Android中使用广播这种异步机制来处理组件之间的消息传递。所谓异步,就是广播的发送方和接收方不需要相互等待。了解Android中广播的特点,那广播使用的是什么机制呢?其实在Android中广播采用的是订阅——发送机制,属于设计模式中的观察者模式(Observer)。在广播的底层实现中,系统为广播发送方维护了一个目标列表,每次要发送广播时,发送方就会遍历这个列表,对其中的每一个目标发送广播。想要接收某个广播的所有接收方,都要事先在该广播对应的列表中完成注册,才能接收到这个广播。9.2收发广播9.2.1发送广播在我们的应用中如果需要发送广播,我们需要定义一个Intent对象,用于封装要发送的消息,并指定Intent中的Action属性用于匹配,然后在使用Context.sendBroadCast()方法,将Intent对象发送出去,参考代码片段如下:Intentintent=newIntent();intent.setAction(Action);intent.putExtra(username,张三);this.sendBroadcast(intent);9.2.2接收广播接收广播的时候,使用BroadcastReceiver类,需要我们实现其内部的onReceive()方法,并在该方法中做具体的操作。参考代码片段如下:privateBroadcastReceiverreceiver=newBroadcastReceiver(){@OverridepublicvoidonReceive(Contextcontext,Intentintent){Stringaction=intent.getAction();}}9.2.3BroadcastReceiver注册分类在Android中,把广播的注册被分为两类,一类是静态注册广播,另一类是动态注册广播。静态注册广播就是预先注册好放在那里等待使用,而动态注册广播就是什么时候需要什么时候注册使用。1.静态注册广播静态注册广播,当你的应用程序关闭了,如果有广播信息过来,你写的广播接收器同样能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml中进行注册,这种注册方式通常又被称作静态注册。当我们需要使用BroadcastReceiver时,首先要在对应的包中创建继承BroadcastReceiver类,并将其通过receiver标签注册到AndroidManifest.xml文件中。参考代码片段如下:receiverandroid:name=MyBroadcastReceiverintent-filteractionandroid:name=com.example.android_demo9_1_broadcastreceiver01//intent-filter/receiver2.动态注册广播非常驻型广播也就是动态注册广播,当应用程序结束了,广播自然就没有了,比如在Activity中的onCreate或者onResume中注册广播接收者,在onDestory中注销广播接收者。这样你的广播接收者就是一个非常驻型的广播了,这种注册方式也叫动态注册。动态注册需要在代码中设置一个IntentFilter对象,然后在需要注册的地方调用Context.registerReceiver()方法,如果取消时就调用Context.unregisterReceiver()方法。9.2.4静态注册广播案例案例界面有1个文本框和1个按钮,点击按钮后会将文本框内容通过广播发送出去,程序接收到广播后会弹出Toast提示信息,显示输入框内容。案例中包括1个布局文件(activity_main.xml),1个Activity组件类(MainActivity类),1个BroadcastReceiver组件类(MyBroadcastReceiver),用于接收和处理广播。案例程序需要在AndroidManifest.xml文件中注册广播接受者,如下:receiverandroid:name=MyBroadcastReceiverintent-filteractionandroid:name=com.example.android_demo9_1_broadcastreceiver01//intent-filter/receiver1.布局文件activity_main.xml代码LinearLayoutxmlns:android=:tools=:id=@+id/LinearLayout1android:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalandroid:paddingBottom=@dimen/activity_vertical_marginandroid:paddingLeft=@dimen/activity_horizontal_marginandroid:paddingRight=@dimen/activity_horizontal_marginandroid:paddingTop=@dimen/activity_vertical_margintools:context=.MainActivityEditTextandroid:id=@+id/et_contentandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:ems=10requestFocus//EditTextButtonandroid:id=@+id/btn_send_messageandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:layout_marginTop=10dpandroid:text=发送广播android:onClick=onClick//LinearLayout2.Activity组件MainActivity类publicclassMainActivityextendsActivity{//编辑文本框对象privateEditTextcontentEt;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//设置布局setContentView(R.layout.activity_main);//获得编辑文本框对象contentEt=(EditText)this.findViewById(R.id.et_content);}publicvoidonClick(Viewview){//获得文本框数据Stringcontent=contentEt.getText().toString().trim();//发送广播Intentintent=newIntent();intent.setAction(com.example.android_demo9_1_broadcastreceiver01);intent.putExtra(content,content);sendBroadcast(intent);}}3.BroadcastReceiver组件MyBroadcastReceiver类//广播接收者publicclassMyBroadcastReceiverextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){//获得发送数据Stringcontent=intent.getStringExtra(content);//提示Toast.makeText(context,发送广播内容:+content,Toast.LENGTH_LONG).show();}}9.2.5动态注册广播案例案例Activity在启动时,动态注册一个系统的短信广播接受者,当系统收到短信后,案例程序会收到系统广播,之后会使用Toast提示短信内容。案例中包括1个布局文件(activity_main.xml),1个Activity组件类(MainActivity类)。在MainActivity类中,创建了一个广播接收者成员,并复写其onReceive方法,在方法中通过传入的Intent对象获取短信内容,之后使用Toast显示短信内容。MainActivity类还在onCreate方法中动态注册一个系统短息的广播接收者,在onDestory方法中注销动态注册的系统短信广播接收者。当系统收到短信时,会发出一个action名称为Android.provier.Telephony.SMS_RECEIVED的广播Intent,该Intent存放了接收到的短信内容,使用名称“pdus”即可从Intent中获取短信内容。pdus是一个object类型的数组,每一个object都是一个byte[]字节数组,每一项为一条短信。增加接收短信权限uses-permissionandroid:name=android.permission.RECEIVE_SMS/uses-permissionObject[]pduses=(Object[])intent.getExtras().get(pdus);for(Objectpdus:pduses){byte[]pdusmessage=(byte[])pdus;SmsMessagesms=SmsMessage.createFromPdu(pdusmessage);Stringmobile=sms.getOriginatingAddress();//发送短信的手机号码Stringcontent=sms.getMessageBody();//短信内容Datedate=newDate(sms.getTimestampMillis());SimpleDateFormatformat=newSimpleDateFormat(yyyy-MM-ddHH:mm:ss);Stringtime=format.format(date);//得到发送时间}1.布局文件activity_main.xml代码RelativeLayoutxmlns:android=:tools=:layout_width=match_parentandroid:layout_height=match_parentandroid:paddingBottom=@dimen/activity_vertical_marginandroid:paddingLeft=@dimen/activity_horizontal_marginandroid:paddingRight=@dimen/activity_horizontal_margi
本文标题:移动设备软件应用开发第9章
链接地址:https://www.777doc.com/doc-3442423 .html