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 ...
随机推荐
- 动态给div中新增html
小颖最近接触的项目中用到了 innerHTML 所以小颖今天就自己做了个demo,当当当当代码请看下方: 页面效果:
- Eclipse开发工具组合键介绍
1. 编辑类 Ctrl + Q 跳到最后一次的编辑处 Ctrl + 1 快速修复提示 Alt + ↓ ...
- EntityFramework 如何进行异步化(关键词:async·await·SaveChangesAsync·ToListAsync)
应用程序为什么要异步化?关于这个原因就不多说了,至于现有项目中代码异步化改进,可以参考:实际案例:在现有代码中通过async/await实现并行 这篇博文内容针对的是,EntityFramework ...
- Lua 学习笔记(八)错误(error)
Lua所遇到的任何未预期条件都会引发一个错误.因此在发生错误时不能简单的崩溃或着退出,而是结束当前程序块并返回应用程序.当错误引发时进行恰当的处理是最合适的,然而这个阶段伴随着错误的捕获.错误的处理. ...
- 设计数据库字段或者java中使用boolean型时需谨慎
boolean型变量只有两个值 false和true,我们在设计数据库字段时或者定义java变量时会使用boolean,通常情况下开关类的变量使用无可非议,但请一定要考虑到扩展性. 使用前请仔细考虑一 ...
- java 中多线程之间的通讯之等待唤醒机制
wait notify () nitifyAll () 都使用在同步中,因为要对持有监视器(锁)的线程操作 所以要使用在同步中,因为只有同步才具有锁 为什么这些操作线程的方法要定义object类中呢 ...
- 使用phpize安装php扩展
环境: CentOs 6.3 php 7 nginx 举例: 安装ssh2扩展 1.登陆http://pecl.php.net,搜索ssh2,如下图所示,注意版本的选择要根据php的版本来 2.下载s ...
- Circuit Breaker Pattern(断路器模式)
Handle faults that may take a variable amount of time to rectify when connecting to a remote service ...
- CSS魔法堂:Box-Shadow没那么简单啦:)
前言 说起box-shadow那第一个想法当然就是用来实现阴影,其实它还能用于实现其他好玩的效果的,本篇就打算说说box-shadow的那些事. 二话不说看效果 3D小球 <style typ ...
- CSS3魔法堂:说说Multi-column Layout
前言 是否记得<读者文摘>中那一篇篇优美感人的文章呢?那除了文章内容外,还记得那报刊.杂志独有的多栏布局吗? 当我们希望将报刊.杂志中的阅读体验迁移到网页上时,最简单直接的方式就是采用 ...