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 ...
随机推荐
- Detach Volume 操作 - 每天5分钟玩转 OpenStack(55)
上一节我们成功地通过 attach 操作为 instance 添加了 volume,而与之相对的操作是 detach,就是将 volume 从 instance 上卸载下来. 下图是 Detach 操 ...
- C# 一个页面,多个Updatepannel,多个Timer
这几天在搞一个项目,其中一个页面里面有好几组数据要定时刷新,但是,每一组数据要刷新的时间不一样,所以就需要用到多个定时器.本人刚工作不久,对Js 的Ajax不太了解,反而对微软的那个Ajax相对了解一 ...
- 基于android studio编译工具下的android开发之IBeacon 例子
想直接看主要内容的请调到红字下面. 之所以会接触到android下的IBeacon,是因为我自己导师给的任务.一个网址http://estimote.com/和一句话:看看这个网站,然后试下在安卓手机 ...
- Callbacks vs Events
前言:本文翻译自Dean Edwards的一篇文章,原文地址:http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/. 文章主要指出了 ...
- composer安装yii2问题总结
今天周六,在家安装yii2的advanced版本, 过程有些坎坷, 不过最后总算安装好了. 总结一下, 主要遇到下面两个问题: 1, 下载速度慢, 主要原因是网络问题 下载yii2时, 模板(除了ve ...
- 最基本的javascript native carousel (1)
原理:主要运用z-index这个属性来设置图片的展示和隐藏,代码如下: <!DOCTYPE html> <html lang="en"> <head& ...
- 利用Swashbuckle生成Web API Help Pages
利用Swashbuckle生成Web API Help Pages 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: ...
- “WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心
近日微软公布了最新的WPF路线图,一片热议:对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread Studio for WPF产品做了一次重要更新,并随着Spread S ...
- 【转】App开放接口api安全性—Token签名sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
- ActiveX(一)第一个简单的Demo
说道ActiveX,我的第一直觉就是Flash,利用ActiveX.我们可以创建丰富的可交互式应用程序.同时.利用ActiveX特性.我们可以实现Js 与 ActiveX 的无缝连接(包括数据共享.和 ...