Android Intent 小结

来源:互联网 发布:unity3d无缝地图 编辑:程序博客网 时间:2024/05/22 09:09

//打开指定网页
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(“http://www.google.com“));
startActivity(intent);

//进行关键字搜索
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, “android”); //keywords: android
startActivity(intent);

//拨打指定号码电话
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(“tel:235345”));
startActivity(intent);
Uri.parse(“prefix:num”)
// “http:”或“https:”表示网络地址类型,
// “tel:”表示电话号码类型,“mailto:”表示邮件地址类型,等

在目标标签中包含了以下几种子元素,他们定义了url的匹配规则:
android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”…之外,我们可以定义自己的前缀
android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名
android:port 匹配url中的端口
android:path 匹配url中的路径

// for example:






<– android:pathPrefix=”/target”
scott://com.scott.intent.data:7788/target/hello
–>

Intent intent = new Intent(“com.scott.intent.action.TARGET”);
intent.setData(Uri.parse(“scott://com.scott.intent.data:7788/target”));//merge
startActivity(intent);

// put Bundle Data
Intent intent = new Intent(“xxxxx”);
Bundle bundle = new Bundle();
bundle.putInt(“id”, 0);
bundle.putString(“name”, “scott”);
intent.putExtras(bundle);
startActivity(intent);

// get Bundle Data
Bundle bundle = intent.getExtras();
int id = bundle.getInt(“id”);
String name = bundle.getString(“name”);
or
int id = intent.getIntExtra();
String name = intent.getStringExtra();

也可以使用Intent的getIntExtra和getStringExtra方法获取,其数据源都是Intent中的Bundle类型的实例对象

以上涉及到了Intent的三个属性:
Intent包括以下属性:
1.action,要执行的动作
2.data和extras,即执行动作要操作的数据和传递到目标的附加信息
3.category,要执行动作的目标所具有的特质或行为归类


几个常见的category如下:
Intent.CATEGORY_DEFAULT (android.intent.category.DEFAULT) //默认的category
Intent.CATEGORY_PREFERENCE (android.intent.category.PREFERENCE) // 表示该目标Activity是一个首选项界面
Intent.CATEGORY_BROWSABLE (android.intent.category.BROWSABLE) //指定了此category后,在网页上点击图片或链接时,系统会考虑将此目标Activity列入可选列表,供用户选择以打开图片或链接。

intent.addCategory(String category); //在为Intent设置category时,应使用addCategory(String category)方法向Intent中添加指定的类别信息,来匹配声明了此类别的目标Activity。

4.type:要执行动作的目标Activity所能处理的MIME数据类型
例如:一个可以处理图片的目标Activity在其声明中包含这样的mimeType:

在使用Intent进行匹配时,我们可以使用setType(String type)或者setDataAndType(Uri data, String type)来设置mimeType。
setType(String type)
setDataAndType(Uri data, String type)

5.component,目标组件的包或类名称
在使用component进行匹配时,一般采用以下几种形式:
intent.setComponent(new ComponentName(getApplicationContext(), TargetActivity.class));
intent.setComponent(new ComponentName(getApplicationContext(), “com.scott.intent.TargetActivity”));
intent.setComponent(new ComponentName(“com.scott.other”, “com.scott.other.TargetActivity”));

其中,前两种是用于匹配同一包内的目标,第三种是用于匹配其他包内的目标。需要注意的是,如果我们在Intent中指定了component属性,系统将不会再对action、data/type、category进行匹配。

Activity:
startActivity(), startActivityForResult()

Service:
startService(), bindService()

Broadcasts:
sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()

activity.setResult() –> startActivityForResult()
+++++++++++++++++++++++++++++++++++++++++++++++++
Intent对象由以下六个部分组成:
1.Component name
2.Action
3.Data
4.Category
5.Extras
6.Flags

Component name
  Component name即组件名称,是要处理这个Intent对象的组件名称。
  组件名称对象由ComponentName类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。
  组件名称通过 setComponent(),setClass(),setClassName()设置,通过getComponent()获取。
  需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。

Action
  Action是指Intent要完成的动作,是一个字符串常量。
ACTIONS:
ACTION_CALL, ACTION_EDIT, ACTION_MAIN, ACTION_SYNC,
ACTION_BATTERY_LOW, ACTION_HEADSET_PLUG, ACTION_SCREEN_ON,
ACTION_TIMEZONE_CHANGED

使用 setAction() 和 getAction()来设置和读取Action属性。

Data
  Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格。
比如,Action是ACTION_EDIT时,数据域将是文档的URI;Action是ACTION_CALL时,数据域是 tel: URI ,带有要拨打的电话号码;如果Action是 ACTION_VIEW,则数据域是http: URI。

  当匹配intent和能够处理intent所带的数据的组件时,知道数据类型(MIME类型)是很重要的。比如,一个展示图像的组件不应该被叫去播放一个音频。
  很多情况下,从URI可以看出数据类型,比如content: URIs,表示数据是在设备上,但是是由content provider控制。
  数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME type用getType()。

Category
  Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类。
一个Intent对象中可以包含任意数量的category描述信息。  
与category相应的方法有添加addCategory()、移除removeCategory() 和获取所有category getCategories() 。

Extras
  传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。
数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。

Flags
  各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。
+++++++++++++++++++++++++++++++++++++++++++++++++

每一个元素可以指定一个URI和一个数据类型(MIME media type)。

每一个URI包含下列属性:
scheme, host, port, path

如:scheme://host:port/path

例如,在下面的URI中:
content://com.example.project:200/folder/subfolder/etc