博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Intent 总结
阅读量:5773 次
发布时间:2019-06-18

本文共 5087 字,大约阅读时间需要 16 分钟。

//打开指定网页

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:”表示邮件地址类型,等

在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则:

android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀
android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名
android:port 匹配url中的端口
android:path 匹配url中的路径

// for example:

<activity android:name=".TargetActivity">
<intent-filter>
<action android:name="com.scott.intent.action.TARGET"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="scott" android:host="com.scott.intent.data" android:port="7788" android:path="/target" />
</intent-filter>
</activity>

<-- 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 android:name="android.intent.category.LAUNCHER" />

几个常见的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:
<data android:mimeType="image/*">
在使用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类中。
+++++++++++++++++++++++++++++++++++++++++++++++++
<data android:mimeType="video/mpeg" android:scheme="http">
<data android:mimeType="audio/mpeg" android:scheme="http">

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

每一个URI包含下列属性:

scheme, host, port, path

如:scheme://host:port/path

例如,在下面的URI中:

content://com.example.project:200/folder/subfolder/etc

转载地址:http://dexux.baihongyu.com/

你可能感兴趣的文章
UIImageView响应点击事件
查看>>
Outlook2010無法登陸Exchange2010服務器
查看>>
Linux系统监视利器--htop
查看>>
Linux下挂载LVM遇到卷组同名的解决方法
查看>>
PHP 的 uniqid 函数产生的 id 真的是唯一的么?
查看>>
TCP/IP 协议
查看>>
以太网
查看>>
Linux下PHP Oracle客户端扩展(OCI8)安装
查看>>
MySQL主从配置
查看>>
windows环境中python3.5下安装paramiko
查看>>
群集技术全接触
查看>>
基于RTSP的实现多媒体文件下载
查看>>
epoll的一点总结
查看>>
grub密码
查看>>
AS3实用小知识
查看>>
golang中recover和panic用法
查看>>
我的友情链接
查看>>
PingingLab传世经典系列《CCNA完全配置宝典》-4.2 PPP基本配置
查看>>
我的友情链接
查看>>
IT人士的知识管理-第一篇
查看>>