注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东东的博客

江南烟雨,同大家一起分享

 
 
 

日志

 
 

android intent 的接收和发送  

2009-09-22 10:24:12|  分类: android相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1. Intents被分成两个主要目录

● Activity Action Intents(活动动作意图)Intents用来呼叫应用程序以外的活动。只有一个活动可以处理Intent。例如,对于网页浏览器,你需要打开网页浏览器活动来显示一个页面。

● Broadcast Intents (广播意图)Intents 被送出到多个活动来处理。一个被Android发出的广播意图的例子就是,当前电池的电量。任何活动处理这个意图并适时的反应。——例如,如果电池电量低到一定程度,取消一个活动。

2.android程序生命周期

● onCreate
● on
Start
● Process-specific events (for example: launching activities or accessing a database)
● on
Stop
● on
Destroy

3.通用的活动动作意图

(图略)

4.通用的广播意图

  (图略)

5.android传值方法总结

当一个application 中有多个 Activity的时候,那么每个Activity之前的传值就是一个问题了。所以这里介绍一下相关的方法。

在Android平台传值,主要使用两种方法一个事 PendingIntent   另一个就是广播了

按照大类,我把相关的类进行了划分

1.实体类 Intent   、Context 、   BroadcastReceiver
2.方法类 PendingIntent Context.sendBroadcast

传递的方法 也就是方法类中的两种


A Intent 字面意思是意图,其实他的效果和字面意思差不多,高焕堂的很多书中都有详细的介绍。

他就像一个快递员,而且是个无所不能的快递员,什么都能送,只要你能把信息加到他上面去

详细的使用方法可以再SDK中找到,如果想要添加你想要的内容 可以用 Intent.set**系列方法。

B Context 这个翻译成环境更好一些

顾名思义 他就是获取我们当前的环境状态, 比如说我想知道现在用户使用的什么语言,处于什么状态,航班、静音。用户有没有接打电话

等等,就像我们获取系统时间一样。Context也我们设置了一个容器让我们来获取系统的状况。

因为这个系统状况很重要,有的时候就是以系统状态为依据,所以Intent 好多方法都要加入这个 都需要 Intent.context

C BroadcastReceiver   是专门用来接收广播的类

    所以他有一个OnReceive()的方法 而具体的接受 我在下面详述。




α PendingIntent   这个方法就是直接传递 Intent
好传出了,怎么才能保证能接收到呢?因为Intent是一个很强大的快递员,他能记录货物需要达到的地点,所以PendingIntent 干吗,他相当于一个Intent的工作场所,他只负责吧Intent送出去
而Intent 去那里,直接告诉 Intent就可以了
通过下面这条语句就可以达到显影的效果   intent.setClass(Activity.this//指代Activity, Report.class//指代目标类);

接收端怎么获取消息呢,这个也简单。因为Intent 已经按照他自己的地址来到了所处的地方,我们直接实例化就行了。
当然这是在简单的情况下,就是说如果这个公司只有一个货物所以我们之需要一个快递员就可以,接收方目前只有这个货物需要接收,那快递员一到他接收方只要确认一下就知道他来干嘛了。

但多数情况下,两家公司的业务非常繁忙,所以可能有多个快递员,多个货物,同一个部门可能有多个。那么怎么来做呢。就需要加限定规则
(1)首先是 在Intent中加限定,可以设定一个 Permission String   就像暗号一样,如果暗号对了肯定错不了 (这个在广播方法中很重要)
(2)另一个就是在实例化的时候确定好实例的是那个一个 参数

具体的请大家参看SDK

β 使用广播来进行数据传递
如果直接使用PendingIntent 是有目的的传送, 那广播可真算是漫无目的的传送信息了

其实Broadcast 中传递的内容也是Intent ,但可以传递的范围可是远的多。
而且系统的很多其他程序也在发送广播,比如说手机的状态,还要说一下航班状态,如果出于航班状态,那么系统就会自动发送广播,而我们只要去接收就好,这样我们就能知道哦,系统现在时在广播状态。

   而在Widget 接受方法使用广播,一方面是因为AppWidget 本来就是继承BroadcastReciever 所以比较纯,不会出问题。另外,这个是我的个人判断,因为Widget还是和普通的app不同,我估计如果直接给 Widget传送 Intent 又会受到限制,就像 handler的一样,当然这是我的猜测,但是感觉还是用 广播靠谱

   广播的载体是Intent,但是他们的标号则是Action。系统内定了很多Action。

   当然我们也可以自己定义Intent 。 之需要 Intent("你自己定义的一个字符串")

   接收方麻烦一些 需要 注册
registerReceiver(intent, commandFilter);
   第二个参数是Intent的过滤,而且不能为空。

   如果是自己定义的Action 那还需要

String action = intent.getAction();

if (action.equals("自定定义的Action")) { 相应的Intent的实例化 必须在这里进行
}


Σ Widget 使用 PendingIntent 是因为 没有其他的方法了。说实话 AppWidget 就给我们一个 可以使用RemoteViews 的方法,别的都不能用。所以就顺势写了一个SetPeningIntent 当然这个方法也有很多固定的用法 ,启动服务,启动活动 ,发送广播,基本上该有的他都有了 。



3.最后再来说一下 Action   其实一个字符串但是这个字符串 因为很长所以基本上很少有人和其明明重合
他们就是来定义一些状态,还是航空状态,他的的Action就是
ACTION_AIRPLANE_MODE_CHANGED

具体的什么在Intent 搜索一下都能找到

转自 http://wjh2-316.blog.163.com/blog/static/27872753200963010023461/
  评论这张
 
阅读(2039)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017