Intent属性详解三 data、type和extra

1 Data 执行时要操作的数据
在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则:
android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀
android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名
android:port 匹配url中的端口
android:path 匹配url中的路径
在XML中声明可以操作的data域应该是这样的:
<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>
注意:
这个标识比较特殊,它定义了执行此Activity时所需要的数据,也就是说,这些数据是必须的!!!!!所有如果其它条件都足以激活该Activity,但intent却没有传进来指定类型的Data时,就不能激活该activity!!!!
2 Intent的Type属性
Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
3 方法
1 settype
使用该函数表示要查找文件的mime类型(如*/*),这个和组件在manifest里定义的相对应,但在源代码里:
public Intent setData(Uri data) {
mData = data;
mType = null;
return this;
}
会将type设为null。
2 setdata
该函数的参数是uri,所以要将数据通过该函数传递时,记得要把数据转化为uri,如Uri.fromFile(new File("/mnt/sdcard/"))。
该函数源代码
public Intent setType(String type) {
mData = null;
mType = type;
return this;
}
3 setdataandtype
所以要同时设置data和type的话只能用函数setdataandtype了
public Intent setDataAndType(Uri data, String type) {
mData = data;
mType = type;
return this;
}
4 Extras:
Extras属性主要用于传递目标组件所需要的额外的数据。通过putExtras()方法设置。
常用值如下所示:
EXTRA_BCC:存放邮件密送人地址的字符串数组。
EXTRA_CC:存放邮件抄送人地址的字符串数组。
EXTRA_EMAIL:存放邮件地址的字符串数组。
EXTRA_SUBJECT:存放邮件主题字符串。
EXTRA_TEXT:存放邮件内容。
EXTRA_KEY_EVENT:以KeyEvent对象方式存放触发Intent的按键。
EXTRA_PHONE_NUMBER:存放调用ACTION_CALL时的电话号码
5 Demo源码
activity:
package mm.shandong.com.testdatatype; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView; import java.util.ArrayList; public class TestDataTypeActivity extends AppCompatActivity { TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_data_type);
textView= (TextView) findViewById(R.id.textView);
}
public void readDataAndType1(View view){
Intent intent=new Intent();
Uri uri= Uri.parse("http://www.baidu.com/2.asp");
intent.setData(uri);
intent.setType("abc/efg");
String str="Data: "+intent.getDataString()+", Type:"+intent.getType();
textView.setText(str);
}
public void readDataAndType2(View view){
Intent intent=new Intent();
intent.setType("abc/efg");
Uri uri= Uri.parse("http://www.baidu.com/2.asp");
intent.setData(uri);
String str="Data: "+intent.getDataString()+", Type:"+intent.getType();
textView.setText(str);
}
public void readDataAndType3(View view){
Intent intent=new Intent();
Uri uri= Uri.parse("http://www.baidu.com/2.asp");
intent.setDataAndType(uri,"abc/efg");
String str="Data: "+intent.getDataString()+", Type:"+intent.getType();
textView.setText(str);
}
public void startDataAndType1(View view){
Intent intent=new Intent();
intent.setAction("TestDataTypeActivityXXX");
Uri uri= Uri.parse("ottp://");
intent.setData(uri);
startActivity(intent);
} public void startDataAndType2(View view){
Intent intent=new Intent();
intent.setAction("TestDataTypeActivityXXX");
Uri uri= Uri.parse("ottp://shandong.mm");
intent.setData(uri);
startActivity(intent);
}
public void startDataAndType3(View view){
Intent intent=new Intent();
intent.setAction("TestDataTypeActivityXXX");
Uri uri= Uri.parse("ottp://shandong.mm:8080");
intent.setData(uri);
startActivity(intent);
}
public void startDataAndType4(View view){
Intent intent=new Intent();
intent.setAction("TestDataTypeActivityXXX");
Uri uri= Uri.parse("ottp://shandong.mm:8080/pathparent/pathchild");
intent.setData(uri);
startActivity(intent);
}
public void startDataAndType5(View view){
Intent intent=new Intent();
intent.setAction("TestDataTypeActivityXXX");
Uri uri= Uri.parse("ottp://shandong.mm:8080/pathparent/pathchild");
intent.setDataAndType(uri,"abc/efg");
startActivity(intent);
} }
清单文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mm.shandong.com.testdatatype"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".TestDataTypeActivity"
android:configChanges="keyboardHidden|orientation|screenSize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".TestDataTypeActivity1"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="含有scheme">
<intent-filter>
<action android:name="TestDataTypeActivityXXX" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ottp" />
</intent-filter>
</activity>
<activity
android:name=".TestDataTypeActivity2"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="含有host">
<intent-filter>
<action android:name="TestDataTypeActivityXXX" /> <category android:name="android.intent.category.DEFAULT" /> <data
android:host="shandong.mm"
android:scheme="ottp" />
</intent-filter>
</activity>
<activity
android:name=".TestDataTypeActivity3"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="含有port">
<intent-filter>
<action android:name="TestDataTypeActivityXXX" /> <category android:name="android.intent.category.DEFAULT" /> <data
android:host="shandong.mm"
android:port="8080"
android:scheme="ottp" />
</intent-filter>
</activity>
<activity
android:name=".TestDataTypeActivity4"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="含有path">
<intent-filter>
<action android:name="TestDataTypeActivityXXX" /> <category android:name="android.intent.category.DEFAULT" /> <data
android:host="shandong.mm"
android:path="/pathparent/pathchild"
android:port="8080"
android:scheme="ottp" />
</intent-filter>
</activity>
<activity
android:name=".TestDataTypeActivity5"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="data和type同时存在">
<intent-filter>
<action android:name="TestDataTypeActivityXXX" /> <category android:name="android.intent.category.DEFAULT" /> <data
android:host="shandong.mm"
android:mimeType="abc/efg"
android:path="/pathparent/pathchild"
android:port="8080"
android:scheme="ottp" />
</intent-filter>
</activity>
</application> </manifest>
本人微博:honey_11
Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子源码,源码例子文档一网打尽
Intent属性详解三 data、type和extra的更多相关文章
- Android零基础入门第80节:Intent 属性详解(下)
上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动. 四.Data和Type属性 Data属性通常用于向Action属性提供操作的数据.Data属 ...
- input表单的type属性详解,不同type不同属性之间区别
目标:详解表单input标签type属性常用的属性值 一.input标签和它的type属性 PS:input 元素可以用来生成一个供用户输入数据的简单文本框. 在默认的情况下, 什么样的数据均可以输入 ...
- Android零基础入门第79节:Intent 属性详解(上)
Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各属性.本期将详细介绍Intent的各属性值,以及 Android如何根据不同属性值来启动相应的组件. ...
- Intent属性详解二 Action、Category
先看效果图: 1.Action:该activity可以执行的动作 该标识用来说明这个activity可以执行哪些动作,所以当隐式intent传递过来action时,如果跟这里<intent-fi ...
- Intent属性详解一 component属性
先看效果图 概述 在介绍Component之前,我们首先来了解ComponentName这个类:ComponentName与Intent同位于android.content包下,我们从Android官 ...
- OutputCache属性详解(三)— VaryByHeader,VaryByCustom
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
- tomcat 三种部署方式以及server.xml文件的几个属性详解
一.直接将web项目文件件拷贝到webapps目录中 这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.如果你想要修改这个默认 ...
- Android开发–Intent-filter属性详解
Android开发–Intent-filter属性详解 2011年05月09日 ⁄ Andriod ⁄ 暂无评论 ⁄ 被围观 1,396 views+ 如果一个 Intent 请求在一片数据上执行一个 ...
- Intent知识详解
Intent知识详解 一.什么是Intent 贴一个官方解释: An intent is an abstract description of an operation to be performed ...
随机推荐
- 用jquery.pager.js实现分页
1.html <link href="/stylesheets/Pager.css" rel="stylesheet" type="text/c ...
- 通过HTTP协议上传文件
HTTP是很常见的协议,虽然用得很多,但对细节的了解却是很浅,这回通过向服务端上传文件信息来理解细节.网络库的选择:1.WinHTTP是windows下常用的库:2.CURL是广受喜爱的开源 ...
- 【开源】OSharp框架解说系列(2.2):EasyUI复杂布局及数据操作
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
在上一篇博客中<iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流>,自定义瀑布流的列数,Cell的外边距,C ...
- Ubuntu杂记——Apache+PHP+MySQL的安装
昨天晚上,参考博客园的另一篇文章,在自己的Ubuntu上搭建了一个Apache+PHP+MySQL的服务器,在此谨记,以备不时之需. 一.安装Apache sudo apt-get install a ...
- 记录 android 开发的一个 "面试" 问题
前序: 3天前,有幸得到师兄赏识,和他一起去帮一间珠海的本地的IT公司担任面试官,虽说如此,我自己本身就还没毕业,充其量是去见识下世面罢了.当天共面试了13人,这只是上午,下午我闪了.在笔试的部分,我 ...
- 让自己也能使用Canvas
<canvas> 是 HTML5 新增的元素,可使用JavaScript脚本来绘制图形.例如:画图,合成照片,创建动画甚至实时视频处理与渲染. 兼容性方面,除了一些骨灰级浏览器IE6.IE ...
- GeoServer中利用SLD配图之矢量图层配图
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1 背景 我们在ArcMap中可以直接通过symbol功能对图层进行定 ...
- gnuplot: 一种更为简洁的曲线,柱状图绘图软件
gnuplot: 一种更为简洁的曲线,柱状图绘图软件 gnuplot: 一种更为简洁的曲线,柱状图绘图软件 Zhong Xiewei Wed Jun 25 gnuplot简单介绍 关于gnuplot的 ...
- PHP CURL CURLOPT参数说明(curl_setopt)
CURLOPT_RETURNTRANSFER 选项: curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 如果成功只将结果返回,不自动输出任何内容. 如果失败返回F ...