Android移动应用设计与开发
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Context.sendSticky Broadcast 方法
7.1.1 发送广播
(2)3种发送广播方法的区别 sendBroadcast或sendStickyBroadcast发送出去的Intent,对于所有 满足条件的BroadcastReceiver都会执行其onReceive方法。但若有 多个满足条件的BroadcastReceiver,其执行onReceive方法的顺序 是没有保证的。 通过sendOrderedBroadcast方法发送出去的Intent,会根据 BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行 onReceive方法,相同优先级的BroadcastReceiver执行onReceive 方法的顺序是没有保证的。 sendStickyBroadcast主要的不同是,Intent在发送后会一直存在,并 且在以后调用registerReceiver注册相匹配的Receiver时会把这个 Intent对象直接返回给新注册的Receiver。
7.1.2 接收广播
在程序发送出去广播之后,必然要有接收器来接收广播。在Android下,要 想接收广播信息,那么这个广播接收器就得我们自己来实现。 我们可以继承BroadcastReceiver类,这就是一个广播接收器。但是,在接 收到广播之后,要想处理相关事件,我们必须覆盖其onReceiver()方法, 在该方法中实现对广播事件的相关处理,当Android系统接收到与之匹配的 广播消息时,会自动启动此BroadcastReceiver开始接收广播。 以下为实现广播接收的过程:
常量
android.intent.action.BOOT_COMPLETED android.intent.action.ACTION_TIME_CHANGED android.intent.action.ACTION_DATE_CHANGED
值
ACTION_BOOT_COMPLETED ACTION_TIME_CHANGED ACTION_DATE_CHANGED
android.intent.action.ACTION_PACKAGE_ADDED ACTION_PACKAGE_ADDED
7.2 广播实例
(1)实例说明:当用户执行登录/注销操作,若登录/注销成功,系统会发送登录 /注销成功的广播。如:广播接收器接收到的Action为表示登录成功的Action,界 面进入主界面,并且Toast组件提示登录,如下图所示:
7.1.1 发送广播
(3)发送广播示例
通常我们在发送广播时使用的是sendBroadcast()方法,但需要注意的是,在构造 Intent时必须用一个全局唯一的字符串标识其要执行的动作,通常使用应用程序包的名 称,也可以采用自己定义的动作。如果要在Intent中传递其他的数据,可以用Intent的 putExtra()方法。下面为发送一带有额外数据的广播的简单代码:
7.1.1 发送广播
(1)发送广播的方法 可以利用Intent来发送广播,在需要发消息的地方创建一个Intent对象,将信 息的内容和用于过滤的信息封装起来,通过以下三种方法将该Intent对象广播 出去:
发送广播方法
Context.send Broadcast 方法
Context.send OrderedBroadcast 方法
public class MyBroadcastReceiver extends BroadcastReceiver { // action名称 String Intent_Action = com.android.BroadcastReceiverDemo; public void onReceive(Context context, Intent intent) { if ( intent.getAction().equals( Intent_Action)) { //相应事件的处理 } } }
String Intent_Action = com.android.BroadcastReceiverDemo; Intent intent = new Intent(Intent_Action); Intent.putExtra(“参数”,“参数值”); SendBroadcast(intent);
7.2 广播实例
//接收注销的广播并保存用户的离线状态 if(intent.getAction().equals(BROADCAST_LOGOUT) ) { Toast.makeText(context, context.getText(R.string.menu_logout), Toast.LENGTH_SHORT) .show(); SharedPreferences sharedPreferences = ((ClientApplication) context.getApplicationContext()).getLoginUserInfo(); Editor editor = sharedPreferences.edit(); editor.putInt(RequestParam.STATUS, RequestParam.OFFLINE); editor.commit(); Intent service = new Intent(context, MsgService.class); context.stopService(service); return;}}}
7.1.4 广播的生命周期
(1)广播的生命周期流程
发送广播
接收广播
结束
7.1.4 广播的生命周期
(2)实例分析 下图为发送广播界面: 当我们点击按钮时,它向Android 发送一个广播。通过Log视窗可以 看到Android广播的生命周期,如 下图所示 :
7.1.5常见广播Action常量
对于广播来说,Action指被广播出去的动作。理论上Action可以为任何字符串,而与Android系统 应用有关的Action字符串以静态字符串常量的形式定义在了Intent类中。Action包含很多种,例如呼入 、呼出电话、接受短信等等,下面是Android定义好的常见的一些标准广播常量,如下表所示:
பைடு நூலகம்
代码 注册 广播
7.1.3 声明广播
(2)两种广播注册方法的区别 第一种不是常驻型广播,也就是说广播跟随程序的生命周期 第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播过来,程 序广播接收器也会被系统调用自动运行 广播接收器被注册到系统之后,当系统接收到广播时,通过广播的动作选出对 应的广播接收器,再由广播接收器完成相应事件的响应
Android 移动应用设计 与开发
第7章 广播
本章导读
7.1 发送和接收广播
7.1.1 发送广播
7.1.2 接收广播 7.1.3 声明广播 7.1.4 广播的生命周期 7.1.5 常见广播Action常量
7.2 广播实例
7.1 发送和接收广播
在Android里面有各式各样的广播,比如:电池的状态变化、信号的强弱状 态、电话的接听和短信的接收等等,本节将会介绍系统发送、监听这些广播 的机制
7.2 广播实例
(2)实例代码
import com.androidbook.client.R; import com.androidbook.client.application.ClientApplication; import com.androidbook.client.network.mode.RequestPara m; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.widget.Toast; public class LoginLogoutBroadCast extends BroadcastReceiver{ public static final String BROADCAST_LOGIN = "login"; public static final String BROADCAST_LOGOUT= "logout"; @Override public void onReceive(Context context, Intent intent) { //接收登录的广播并保存用户的在线状态 if(intent.getAction().equals(BROADCAST_LO GIN) ) { Toast.makeText(context, context.getText(R.string.login), Toast.LENGTH_SHORT) .show(); SharedPreferences sharedPreferences = ((ClientApplication) context.getApplicationContext()).getLoginUse rInfo(); Editor editor = sharedPreferences.edit(); editor.putInt(RequestParam.STATUS, RequestParam.ONLINE); editor.commit(); return; }
注意:BroadcastReceiver类中的onReceiver()方法必须要在5秒钟内执行完事件, 否则Android系统会认为该组件失去响应,并提示用户强行关闭该组件。因此, 对于比较耗时的响应事件,可以另开一线程,单独进行事件的处理。
7.1.3 声明广播
(1)广播注册的方法 要想使用广播接收器来响应相应的事件,必须把广播接收器注册到系统里, 让系统知道我们有这个广播接收器。当有广播到来时,系统会找到匹配该广 播的广播接收器,之后进行相应事件的处理。这里有两种广播注册方法: //生成广播接收器 MyBroadcastReceiver receiver = new MyBroadcastReceiver (); //实例化过滤器并设置要过滤的广播 IntentFilter intentFilter = new IntentFilter("Intent_Action"); //注册广播 registerReceiver(receiver,intentFilter); <receiver .在 android:name = "MyBroadcastReceiver" > AndroidMan <intent-filter> ifest.xml中 <action android:name = " 配置广播 com.androidbook.MyBroadcastReceiver"/> </intent-filter> </receiver>
意义
系统启动 时间改变 日期改变 时区改变 电量低 插入或拔出外 部媒体 按下多媒体 添加包 删除包 插上外部电源 断开外部电源 接收短信 发送邮件
android.intent.action.ACTION_TIMEZONE_CHAN ACTION_TIMEZONE_CHANGED GED android.intent.action.ACTION_BATTERY_LOW ACTION_BATTERY_LOW android.intent.action.ACTION_MEDIA_EJECT android.intent.action.ACTION_MEDIA_BUTTON android.intent.action.ACTION_PACKAGE_REMO VED android.intent.action.ACTION_POWER_CONNEC TED android.intent.action.ACTION_POWER_DISCONN ECTED android.provider.Telephony.SMS_RECEIVED android.intent.action.Send ACTION_MEDIA_EJECT ACTION_MEDIA_BUTTON ACTION_PACKAGE_REMOVED ACTION_POWER_CONNECTED ACTION_POWER_DISCONNECTE D Telephony.SMS_RECEIVED Send