如何理解Android BroadcastReceiver 方法onReceive的参数intent.putextra参数

41被浏览5050分享邀请回答411 条评论分享收藏感谢收起21 条评论分享收藏感谢收起查看更多回答用户名:HDDevTeam
文章数:120
评论数:65
访问量:174098
注册日期:
阅读量:1297
阅读量:3317
阅读量:584778
阅读量:470268
51CTO推荐博文
&&& 刚开始做东西得时候很不了解android中一些组件的应用方法,找了一个闹钟的小例子来更好的理解广播的接收.
&& 应用程序的界面是这样的,这个例子是用闹钟的制定与解除来穿插broadcast& Receiver 的知识,不说废话了,先看下应用程序的界面:
& 点击设定闹钟的按钮,弹出来一个设置时间的对话框,你选择时间之后会弹出一个Toast告诉你定的时间时多少,然后到时间之后弹出对话框提示时间到。先看图:
是一个小闹钟的完整过程,代码中关键的部分就是用到AlarmManager控制时间和PendingIntent 捕获要执行的广播,先贴代码再详细讲解代码。
<font color="#& &mButton1.setOnClickListener(new&View.OnClickListener()
<font color="#& &&&&{
<font color="#& &&&&&&public&void&onClick(View&v)
<font color="#& &&&&&&{&/*&取得按下按钮时的时间做为TimePickerDialog的默认值&*/
<font color="#& &&&&&&&&c.setTimeInMillis(System.currentTimeMillis());
<font color="#& &&&&&&&&startCalendar.setTimeInMillis(System.currentTimeMillis());
<font color="#& &&&&&&&&int&mHour&=&c.get(Calendar.HOUR_OF_DAY);
<font color="#& &&&&&&&&int&mMinute&=&c.get(Calendar.MINUTE);&/*&跳出TimePickerDialog来设定时间&*/
<font color="#& &&&&&&&&new&TimePickerDialog(SetAlarmActivity.this,
<font color="# &&&&&&&&&&&&new&TimePickerDialog.OnTimeSetListener()
<font color="# &&&&&&&&&&&&{
<font color="# &&&&&&&&&&&&&&public&void&onTimeSet(TimePicker&view,&int&hourOfDay,
<font color="# &&&&&&&&&&&&&&&&&&int&minute)
<font color="# &&&&&&&&&&&&&&{&/*&取得设定后的时间,秒跟毫秒设为0&*/
<font color="# &&&&&&&&&&&&&&&&c.setTimeInMillis(System.currentTimeMillis());
<font color="# &&&&&&&&&&&&&&&&c.set(Calendar.HOUR_OF_DAY,&hourOfDay);
<font color="# &&&&&&&&&&&&&&&&c.set(Calendar.MINUTE,&minute);
<font color="# &&&&&&&&&&&&&&&&c.set(Calendar.SECOND,&<span style="color: #);
<font color="# &&&&&&&&&&&&&&&&c.set(Calendar.MILLISECOND,&<span style="color: #);
<font color="# &&&&&&&&&&&&&&&&Intent&intent&=&new&Intent(SetAlarmActivity.this,
<font color="# &&&&&&&&&&&&&&&&&&&&CallAlarm.class);
<font color="# &&&&&&&&&&&&&&&&PendingIntent&sender&=&PendingIntent.getBroadcast(
<font color="# &&&&&&&&&&&&&&&&&&&&SetAlarmActivity.this,&<span style="color: #,&intent,&<span style="color: #);
<font color="# &&&&&&&&&&&&&&&&AlarmManager&
<font color="# &&&&&&&&&&&&&&&&am&=&(AlarmManager)&getSystemService(ALARM_SERVICE);
<font color="# &&&&&&&&&&&&&&&&am.set(AlarmManager.RTC_WAKEUP,&c.getTimeInMillis(),
<font color="# &&&&&&&&&&&&&&&&&&&&sender);&/*&更新显示的设定闹钟时间&*/
<font color="# &&&&&&&&&&&&&&&&String&tmpS&=&format(hourOfDay)&+&&:&&+&format(minute);
<font color="# &&&&&&&&&&&&&&&&setTime1.setText(tmpS);&/*&以Toast提示设定已完成&*/
<font color="# &&&&&&&&&&&&&&&&Toast.makeText(SetAlarmActivity.this,&&设定闹钟时间为&&+&tmpS,
<font color="# &&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show();
<font color="#
<font color="# &&&&&&&&&&&&&&}
<font color="# &&&&&&&&&&&&},&mHour,&mMinute,&true).show();
<font color="# &&&&&&}
<font color="# &&&&});
代码中显示了当点击按钮之后所进行的代码处理,我们获得了设置的时间,然后用了一个Intent,用了一个pendIntent,这个PendIntent在捕获广播的时候才会启动,然后我们将这个PendIntent绑定到AlarmManager上面,有三个参数,一个是时间格式,一个是响铃的时间,一个是闹铃到期时启动sender这个PendIntent对象,然后启动绑定在PendIntent里面的intent,从而启动广播CallAlarm。
在广播接收器CallAlar中,并不是直接执行代码,广播接收器只有一个onReceive方法,在这个方法里面又启动了另外一个Activity。需要说明的是广播接收器是没有界面的.
<font color="#& package&com.&/*&import相关class&*/
<font color="#&
<font color="#& import&android.content.C
<font color="#& import&android.content.I
<font color="#& import&android.content.BroadcastR
<font color="#& import&android.os.B&/*&调用闹钟Alert的Receiver&*/
<font color="#&
<font color="#& public&class&CallAlarm&extends&BroadcastReceiver
<font color="#& {
<font color="# &&@Override
<font color="# &&public&void&onReceive(Context&context,&Intent&intent)
<font color="# &&{&/*&create&Intent,调用AlarmAlert.class&*/
<font color="# &&&&Intent&i&=&new&Intent(context,&AlarmAlert.class);
<font color="# &&&&Bundle&bundleRet&=&new&Bundle();
<font color="# &&&&bundleRet.putString(&STR_CALLER&,&&&);
<font color="# &&&&i.putExtras(bundleRet);
<font color="# &&&&i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
<font color="# &&&&context.startActivity(i);
<font color="# &&}
<font color="# }
启动另外一个Activity,是弹出闹铃时间到时的提示对话框,看下代码:
<font color="#& package&com.&/*&import相关class&*/
<font color="#&
<font color="#& import&android.app.A
<font color="#& import&android.app.AlertD
<font color="#& import&android.content.DialogI
<font color="#& import&android.os.B
<font color="#&
<font color="#& public&class&AlarmAlert&extends&Activity
<font color="#& {
<font color="# &&@Override
<font color="# &&protected&void&onCreate(Bundle&savedInstanceState)
<font color="# &&{
<font color="# &&&&super.onCreate(savedInstanceState);&/*&跳出的闹铃警示&*/
<font color="# &&&&new&AlertDialog.Builder(AlarmAlert.this).setIcon(R.drawable.clock)
<font color="# &&&&&&&&.setTitle(&闹钟响了!!&).setMessage(&赶快起床吧!!!&).setPositiveButton(
<font color="# &&&&&&&&&&&&&关掉他&,&new&DialogInterface.OnClickListener()
<font color="# &&&&&&&&&&&&{
<font color="# &&&&&&&&&&&&&&public&void&onClick(DialogInterface&dialog,
<font color="# &&&&&&&&&&&&&&&&&&int&whichButton)
<font color="# &&&&&&&&&&&&&&{&/*&关闭Activity&*/
<font color="# &&&&&&&&&&&&&&&&AlarmAlert.this.finish();
<font color="# &&&&&&&&&&&&&&}
<font color="# &&&&&&&&&&&&}).show();
<font color="# &&}
<font color="# }
如果条件允许,还可以在响铃时加上震动,铃声等选项..
附上源码.本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
请输入验证码:1.1.4 BroadcastReceiver组件
本文所属图书&>&
如何才能真正进阶为Android应用开发高手?必须深入理解Android核心技术的底层原理和在开发中总结并使用各种最佳实践,别无他法!本书以Android的源代码为主,SDK为辅,针对应用开发者的需求,对各种核心技术的使...&&
BroadcastReceiver也是最重要的之一。广播的发送本质上是基于Intent进行的,广播的接收实现也非常简单,具体方法如下:
public class AlertReceiver extends BroadcastReceiver
&&& public void onReceive(Context context, Intent intent){
但是,通常在BroadcastReceiver中并不会执行复杂的计算,后台计算一般在服务中执行。将BroadcastReceiver纳入编译的示例如下:
&receiver android:name=&AlertReceiver&&
&& &intent-filter&
&&&&&& &action android:name=
&&android.intent.action.EVENT_REMINDER& /&
&&&&&& &action android:name=
&&android.intent.action.LOCALE_CHANGED& /&
&&&&&& &action android:name=
&android.intent.action.BOOT_COMPLETED& /&
&&&&&& &action android:name=&android.intent.action.TIME_SET& /&
&&&&&& &data android:scheme=&content& /&
&& &/intent-filter&
&/receiver&
如果BroadcastReceiver作为的私有类,那么可以通过上下文环境的如下方法实现BroadcastReceiver的注册和解除:
public abstract Intent registerReceiver(BroadcastReceiver
receiver,IntentFilter filter)
public abstract Intent registerReceiver(BroadcastReceiver receiver,
&& IntentFilter filter,String broadcastPermission,Handler scheduler)
public abstract void unregisterReceiver(BroadcastReceiver receiver)
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。
文章下载读书博客分类:
BroadcastReceiver:对象的生命周期不超过5s,如果进行耗时工作,通过开线程,可以通过发送Intent给Activity或Service,由
Activity或者Service来完成。1:用来已不接收意图的(Intent),广播Intent的发送时通过调用Context.sendBroadcast()\Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()来实现的。注:Context.startActivity(Intent) ------&只能被一个组件(Activity/Service)接收Context.sendBroadcast(Intent) ------&能被订阅了此意图的所有广播接收者接收2:第一步:继承BroadcastReceiver,并重写onReceive方法。
public class IncominSMSReceiver extends BroadcastReceivee{
public void onReceive(Context context,Intent intent)
}3:第二步:订阅感兴趣的广播Intent,订阅方法有两种:
第一种:使用代码进行订阅:
IntentFilter filter=new IntentFilter("android.provider.Telephony.SMS_RECEIVD");
IncomingSMSReceiver receiver=new IncomingSMSReceiver();
registerReceiver(receiver,filter);
第二种:在Manifest.xml中中的&application&节点里进行订阅:
&receiver android:name=".IncomingSMSReceiver"&
&intent-filter&
&action android:name="android.provider.Telephony.SMS_RECEIVER"/&
&/intent-filter&
&/receiver&Service:1:第一步:继承Service类
public classs SMSService extends Service{}2:第二步:在AndrodManifest.xml文件中的&application&节点里对服务进行配置。
&service android:name=".SMSService"&注:服务不能自己运行。需要通过调用Context.startService()或Context.bindServicestartService():调用者与服务之间没有关联。先 调用服务的onCreate()方法,接着调用onStart()方法。多次调用startService()方法并不会导致服务多次被创建,但会多次调 用onStart()方法。并用Context.stopService()方法结束服务,服务结束时调用onDestroy()方法。bindService():调用者与服务绑定在一起“不求同时生,必须同时死。”系统调用服务的onCreate方法接着调用onBind()方法。这 时调用者与服务绑定一起调用者退出时先调用服务的onUnbind()方法,接着调用onDestroy()方法。多次调用bindService()方 法并不会导致调用者与服务多次被绑定。
浏览: 692364 次
来自: 北京
有错误,inSampleSize 为2时,图片大小不是原来的2 ...
很详细!很有用的整理。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 android intent传参数 的文章

 

随机推荐