Android菜鸟的成长笔记(9)——Intent与Intent Filter(下)

原文:[置顶] Android菜鸟的成长笔记(9)——Intent与Intent Filter(下)

接着上一篇的内容,下面我们再来看看Intent的Data与Type属性。

一、Data属性与Type属性

Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象

格式:scheme://host:port/path

例如:

content://com.android.contacts/contacts/1

tel:123

其中prot部分被省略了,contacts/1是path部分。

Type属性用于指定该Data所指定Uri所对应的MIME类型,这种MIME类型可以是自定义的,但是要符合abc/xyz格式。

二、Data属性与Type属性之间的关系

Type属性和Data同时出现会出现覆盖现象,如果要同时设置要使用setDataAndType()方法,举例如下:

	//Type属性被Data覆盖
	public void overrideType(View source){
		Intent intent = new Intent();
		intent.setType("abc/xyz");
		intent.setData(Uri.parse("lee://www.baidu.com:80/test"));
	}
	//Data属性被Type覆盖
	public void overrideData(View source){
		Intent intent = new Intent();
		intent.setData(Uri.parse("lee://www.baidu.com:80/test"));
		intent.setType("abc/xyz");
	}
	//同时设置Data和Type
	public void dataAndType(View source){
		Intent intent = new Intent();
		intent.setDataAndType(
				Uri.parse("lee://www.baidu.com:80/test"), "abc/xyz");
	}	

在manifest配置文件中配置Activity的方法如下

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
                <data
                    android:mimeType=""  <!-- Type属性 -->
                    android:scheme=""	<!-- scheme部分 -->
                    android:host=""		<!-- host部分 -->
                    android:port=""		<!-- port部分 -->
                    android:path=""		<!-- path部分 -->
                    android:pathPrefix=""	<!-- path前缀 -->
                    android:pathPattern=""/>    <!-- path模版 -->
            </intent-filter>

三、Data属性与Type属性的匹配方式

Type属性也是用户指定组件匹配的组件,Type是需要严格匹配的。

Data属性则不需要严格匹配,过程如下:

如果指定了android:scheme属性,那么只要Intent的Data属性的scheme部分与android:scheme属性相同就可以启动该组件。

如果制定了android:scheme属性和android:host需要两个属性与Intent的Data部分的该部分相同则启动该组件。

如果定制了android:scheme、android:host、android:port属性则需要与该部分相同才能启动该组件。

...................

四、小练习

Intent intent = new Intent();
String data = "http://blog.csdn.net/dawanganban";
Uri uri = Uri.parse(data);
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri);
startActivity(intent);

Intent intent = new Intent();
String data = "content://com.android.contacts/contacts/1";
Uri uri = Uri.parse(data);
intent.setData(uri);
startActivity(intent);

Intent intent = new Intent();
String data = "tel:10000";
Uri uri = Uri.parse(data);
intent.setData(uri);
startActivity(intent);

五、Intent的其他属性

Extra属性:用于在多个Activity之间传递数据,该属性其实是一个Bundle对象,后面在Activity间传值的文章中将会介绍。

Flag属性:一些额外的控制旗标,在后面将会详细介绍。

时间: 2024-08-07 22:25:50

Android菜鸟的成长笔记(9)——Intent与Intent Filter(下)的相关文章

Android菜鸟的成长笔记(8)——Intent与Intent Filter(上)

原文:[置顶] Android菜鸟的成长笔记(8)--Intent与Intent Filter(上) Intent代表了Android应用的启动"意图",Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,取决于Intent的各个属性. 一.显式的Intent 明确指定了要启动的组件的Intent我们称为显式的Intent 例如: package com.example.testintent; import android.app.Activity; impor

Android菜鸟的成长笔记(6)——剖析源码学自定义主题Theme

原文:Android菜鸟的成长笔记(6)--剖析源码学自定义主题Theme 还记得在Android菜鸟的成长笔记(3)中我们曾经遇到了一个问题吗?"这个界面和真真的QQ界面还有点不同的就是上面的标题myFirstApp,怎么去掉这个标题呢?",当时我直接在AndroidMainfest.xml中添加了一个属性: android:theme="@android:style/Theme.NoTitleBar" 可能有的朋友就会迷惑了,为什么添加了这个属性就可以了.这一篇

Android菜鸟的成长笔记(7)——什么是Activity

原文:[置顶] Android菜鸟的成长笔记(7)--什么是Activity 前面我们做了一个小例子,在分析代码的时候我们提到了Activity,那么什么是Activity呢? Activity是Android应用程序提供交互界面的一个重要组件,也是Android重要组件之一(另外3个是Service.BroadcastReceiver和ContentProvider). 与开发Web应用时建立Servlet类相似,建立自己的Activity也需要继承Activity基类,当然,在不同应用场景下

Android菜鸟的成长笔记(17)—— 再看Android中的Unbounded Service

原文:Android菜鸟的成长笔记(17)-- 再看Android中的Unbounded Service 前面已经写过关于startService(Unbounded Service)的一篇文章:<Android菜鸟的成长笔记(16)--Service简介>本篇将在这一篇的基础上再来看一下startService的用法.先看一段代码: TestService.java package com.example.myfirstapp; import android.app.Service; imp

Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值

原文:[置顶] Android菜鸟的成长笔记(10)--使用Bundle在Activity之间传值 前面我们了解了如何启动一个Activity,一个Activity在启动另外一个Activity的时候可能会遇到需要传值的需要.Activity之间传值是通过Bundle来实现的. 一.通过Bundle传值介绍 Intent提供了多个重载方法来携带数据 putExtras(Bundle data):向Intent中放入需要的数据包 Bundle getExtras():取出Intent所携带的数据

Android菜鸟的成长笔记(5)——Android系统源代码你下载了吗?

原文:Android菜鸟的成长笔记(5)--Android系统源代码你下载了吗? 在上一篇中我们用Android系统源代码分析了我们前面写的代码,有的朋友可能就会问怎么才能下载到Google官方的源代码呢?下面我们通过Git管理工具来对Android系统源代码进行下载.另外为了方便有的朋友下载,我将下载好的各个版本的源码存放到360云盘,云盘下载链接如下: http://yunpan.cn/QDEkq3uFrbvrI (访问密码:968e) 首先下载Git版本管理工具:下载地址:http://c

Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通

原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写一个搭建过程的文章. 一.JDK安装 http://www.oracle.com/index.html  下载地址 选择JavaSE JDK进行下载 下载下来后进行安装(默认步骤安装) 设置环境变量步骤如下: 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:    

Android菜鸟的成长笔记(4)——你真的理解了吗?

原文:Android菜鸟的成长笔记(4)--你真的理解了吗? 在上一篇中我们查看了QQ的apk源文件中的布局结构,并仿照QQ完成了我们第一个应用的界面,详细请看<Android菜鸟的成长笔记>专栏.这一篇中我们来具体看看这个界面到底是怎么呈现出来的,具体的原理是什么等问题,下面我们将一步一步的解开留在我们心中的谜团. 有的朋友可能会产生这样的疑问为什么几句代码就能显示这样好看的界面? 其实能让这个界面显示的如此丰富多彩,一半功劳在我们编写的那几句代码,还有一半功劳在我们尊敬的google工程师

Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy

原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有点像QQ的登录界面,但是很多地方还是很难看,这一篇咱们来将这个界面做成一个标准的商业界面,并一起来了解Android中的代码运行的原理. 好吧,咱们开始吧,首先启动模拟器,为了让咱们的界面和QQ的登录界面一样我下载了一个QQ的apk文件,下面咱们将这个apk安装到我们的模拟器上,看看效果. 怎么将a