登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 2794183|回复: 619

第八讲:Intent入门指南

  [复制链接]

2826

主题

7684

帖子

9548

安币

管理员

Rank: 9Rank: 9Rank: 9

QQ达人最佳新人活跃会员热心会员推广达人灌水之王突出贡献

QQ
发表于 2011-4-23 13:34:26 | 显示全部楼层 |阅读模式
本讲内容: Intent
点此下载:[/url]
public static final String ACTION_DIAL = "android.intent.action.DIAL"public static final String ACTION_SENDTO = "android.intent.action.SENDTO";
我们还可以自定义Action,并定义相应的Activity来处理我们自定义的行为。
data ,是对执行动作所要操作的数据的描述,Android中采用URI来表示数据,譬如在联系人应用中,指向联系人1的URI可能为:content://contacts/1 (由content provider提供的数据类型是content) 。 结合Action和data可以基本表达出意图,
  • VIEW_ACTION content://contacts/1 — 显示标识符为”1″的联系人的详细信息
  • EDIT_ACTION content://contacts/1 — 编辑标识符为”1″的联系人的详细信息
  • VIEW_ACTION content://contacts/ — 显示所有联系人的列表
  • PICK_ACTION content://contacts/ — 显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父activity。例如:电子邮件客户端可以使用这个 Intent,要求用户在联系人列表中选择一个联系人。
除了Action和data之外,还有4个属性。
catagory 类别,是被请求组件的额外描述信息,Intent类中也定义了一组字符串常量表示Intent不同的类别。完整的列表可以看API文档中Intent类的相应部分。
public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";public static final String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE";
extra 附加信息,除了data之外,还可以通过extra附加信息,extra属性使用Bundle类型进行数据传递,我们可以把Bundle当做HashMap来理解,附加数据可以通过 intent.putExtras() 和 intent.getExtras() 进行传入和读取。 就像这样,获取附加信息: Bundle bundle = intent.getExtras();
添加附加信息: Bundle bundle = new Bundle(); intent.putExtras(bundle);
component 组件,显式指定Intent的目标组件的名称。如果指定了component属性,系统会直接使用它指定的组件,而非匹配查找。
type 数据类型,显式指定Intent的数据类型,一般Intent的数据类型都能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型和不再进行推导。
三、解析Intent
Intent是一种在不同组件之间传递的请求信息,是应用程序发出的请求和意图,作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。
当指定了component属性后,就是显式的指定了目标组件,也就是接收端。如果没有明确指定目标组件,那么Android系统会使用 Intent 里的(action,data,category)三个属性来寻找和匹配接收端。
四、IntentFilter
应用程序组件可以使用IntentFilter来向系统说明自己可以响应和处理那些Intent请求。组件一般通过AndroidManifest.xml文件的<Intent-Filter>描述。

  1. <activity android:name=”.MainTinyPhone” android:label=”@string/app_name”><intent-filter><action android:name=”android.intent.action.MAIN” /><category android:name=”android.intent.category.LAUNCHER” /></intent-filter></activity>
复制代码


五、简单的拨打电话的例子
这是一个简单的拨打电话的程序,它可以截获手机上的拨号按键发出的请求,自己输入号码,并把数据传给系统的打电话程序,从而实现打电话功能。
先上效果图:
按绿色的拨号按钮的时候会呼出一个菜单让你选择使用哪个拨号程序,
我们选择简单拨号程序,出现输入框可以填写电话号码,并拨号
最终实现了拨号:
[url=http://android.yaohuiji.com/wp-content/uploads/2010/07/image71.png][/url]
再上代码,MainTinyDial.java的代码:
  1. package andorid.basic.lesson8;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.net.Uri;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.EditText;

  9. public class MainTinyDial extends Activity {
  10.         /** Called when the activity is first created. */
  11.         @Override
  12.         public void onCreate(Bundle savedInstanceState) {
  13.                 super.onCreate(savedInstanceState);

  14.                 // 按照main.xml來渲染用戶界面
  15.                 setContentView(R.layout.main);

  16.                 // 找到存放电话号码的可编辑文本框
  17.                 final EditText PhoneNumberEditText = (EditText) findViewById(R.id.PhoneNumberEditText);

  18.                 // 找到拨号按钮
  19.                 Button button = (Button) findViewById(R.id.Button01);

  20.                 // 为拨号按钮设置一个点击事件观察者
  21.                 button.setOnClickListener(new Button.OnClickListener() {
  22.                         //实现监听器接口的匿名内部类,其中监听器本身是View类的内部接口

  23.                         //实现接口必须实现的onClick方法
  24.                         @Override
  25.                         public void onClick(View v) {
  26.                                 // 获得可编辑文本框中的值,也就是电话号码
  27.                                 String phoneNumber = PhoneNumberEditText.getText().toString();
  28.                                 // new Intent(行为,数据),其中action_dial是拨号行为,数据是电话号码
  29.                                 Intent intent = new Intent(Intent.ACTION_DIAL, Uri
  30.                                                 .parse("tel://" + phoneNumber));
  31.                                 // 去调用那些可以处理拨号行为的Activity
  32.                                 startActivity(intent);
  33.                         }
  34.                 });

  35.         }
  36. }
复制代码

界面布局的main.xml代码:
<?xml version="1.0" encoding="utf-8"?>               
程序总体设置的AndroidManifest.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
好,本讲就到这里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

29

帖子

17

安币

初级码农

Rank: 1

发表于 2011-5-17 17:02:37 | 显示全部楼层
资料非常好

0

主题

21

帖子

14

安币

初级码农

Rank: 1

发表于 2011-7-8 22:40:53 | 显示全部楼层
学习king

0

主题

21

帖子

14

安币

初级码农

Rank: 1

发表于 2011-7-10 18:53:51 | 显示全部楼层
学习king

0

主题

15

帖子

34

安币

初级码农

Rank: 1

发表于 2011-7-12 22:14:24 | 显示全部楼层
很好 king

0

主题

205

帖子

306

安币

攻城狮

Rank: 3Rank: 3

发表于 2011-7-15 22:36:23 | 显示全部楼层
“按绿色的拨号按钮的时候会呼出一个菜单”这个是怎么设置的?

0

主题

22

帖子

38

安币

程序猿

Rank: 2

发表于 2011-7-19 23:17:46 | 显示全部楼层
感谢分享,每讲都会认真得看

1

主题

28

帖子

38

安币

程序猿

Rank: 2

发表于 2011-7-29 16:36:12 | 显示全部楼层
感谢。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表