layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="隐式跳转到另一个页面"
android:onClick="myOnClick"
/> </RelativeLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.day06_intent_data_type"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.day06_intent_data_type.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.day06_intent_data_type.OtherActivity">
<intent-filter>
<action android:name="com.qf.aaa"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"
android:host="www.baidu.com"
android:port="8080"
android:path="/string"
android:mimeType="txt/xmppp"
/>
</intent-filter>
</activity>
<!--
schme 协议
host 主机名
port 端口号,端口号写与不写对activity中设置的参数无影响,不会报错
mimetype 媒体类型
path 路径 -->
<!-- 注意:清单文件中必须定义category参数,否则报错,但是activity中可以不用设置 ,会默认添加-->
<!-- 当有多个符合intent-filter的activity时,系统会提示两个窗口让用户选择-->
<!-- 当一个activity设置了多个intent-filter时,任选其中一个也可调用该activity-->
<!-- <intent-filter >
<action android:name="com.qf.bbb"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter> --> </application> </manifest>

MainActivity.java

package com.example.day06_intent_data_type;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void myOnClick(View v){
//创建Intent对象
Intent intent = new Intent();
//设置要跳转的action,action参数的名字必须与要跳转activity在清单文件中设置的自定义action的名字一致
intent.setAction("com.qf.aaa");
//将String转成Uri
// data访问资源的格式
// scheme://host:port/path 协议名://主机名:端口号/路径
Uri uri = Uri.parse("http://www.baidu.com:8080/string");
//当要跳转的activity中的data不设置path时,当前的uri可以指定path,
//当跳转的activity中的data设置了path,当前uri必须和其path名一致,否则报错
//设置data与要跳转的activity中 的data设置的参数一致,当data与type都设置了时,不能使用setdata()或者setType()两个互斥,具体看源码
intent.setDataAndType(uri, "txt/xmppp");
//开启新的activity
startActivity(intent);
}
}

OtherActivity.java

package com.example.day06_intent_data_type;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Toast; public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_other);
//获取intent-filter的值
//获取传过来的intent,并通过intent来获得uri
Intent intent = getIntent();
Uri data = intent.getData();
String type = intent.getType();
Toast.makeText(OtherActivity.this, "data:"+data.toString()+",type:"+type, 0).show(); }
}

Note

.隐示意图激活---按照一定约束条件开启
1.先定义需要暴露的activity
2.如何暴露?
在清单文件中activity标签下新添intent-filter标签,
必须写action和category属性,action的值为任意字符串,是intent访问的标识符
<intent-filter >
<action android:name="com.hz1605.haha"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

3.如何访问?(在当前activity中)
不需要给intent指定明确的跳转到那个类,只需要指定action值
1)设置action, ---值必须与需要开启的activity的intent-filter的action值一致
intent.setAction("com.hz1605.haha");
2) category值是默认添加上的
默认会加上category属性 ,默认值为android.intent.category.DEFAULT
intent.addCategory("android.intent.category.DEFAULT");

4.可以开启另外一个app的符合条件的activity,另外一个app关闭的时候也能启动,(action与category设置匹配)
当有多个符合条件的intent-filter时会提示让用户选择(两个activity的intent-filter相同)

7.data type属性
data访问资源的格式
scheme://host:port/path 协议名://主机名:端口号/路径 http:// file://
1.如何在清单文件中编写
<data android:scheme="hello"
android:host="www.baidu.com"
android:path="/key"
android:port="8080"
/>

设置type
<data android:mimeType="txt/"/>
2.如何匹配

Uri uri = Uri.parse("nnn://www.nnn.com");
设置data
当同时又data和type属性时不能使用以下方式设置值,需设置intent.setDataAndData(intent,"txt");
intent.setData(uri);
intent.setType("txt/");

3.如果说一个acitivity注册中有多个intent-filter,只需要匹配一个就可以开启

8.应用
1.打开home页 2.调用拨打电话功能 3.打开浏览器 4.打开发送短信页面

Android_Intent_data_type的更多相关文章

随机推荐

  1. Swift之基础知识

    Swift之基础知识 出于对Swift3.0的学习,写下这篇基本语法的笔记.希望能帮助记忆 -0- 这边提供Swift3.0中文教材,资源链接: https://pan.baidu.com/s/1c2 ...

  2. C++ 模板类解析

    具体模板类作用这边就不细说了,下面主要是描述下模板类的使用方法以及注意的一些东西. #include <iostream> using namespace std; template &l ...

  3. android NDK 实用学习(一)-获取java端类及其类变量

    近期为android 端项目包装一些c++代码,故学习ndk相关知识,现总结如下: 1,java与c++类型参照图: 2,此测试中使用的java类: package com.dasea.test.co ...

  4. debian 显示器使用自定义分辨率

    比如你要使用 1440x900 的自定义分辨率,先利用 cvt 计算一个新的 modeline $  cvt 1440 900 输出为: # 1440x900 59.89 Hz (CVT 1.30MA ...

  5. 关于Java Collections API您不知道的5件事,第2部分

    注意可变对象 java.util 中的 Collections 类旨在通过取代数组提高 Java 性能.如您在 第 1 部分 中了解到的,它们也是多变的,能够以各种方 式定制和扩展,帮助实现优质.简洁 ...

  6. 我是如何理解Java抽象类和接口的

    在面试中我们经常被问到:Java中抽象类和接口的区别是什么? 然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦:一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好 ...

  7. 让IE浏览器支持CSS3圆角的方法

    如果要想在IE浏览器中实现圆角的效果,我们一般都会采用圆角图片的方式.用图片的话,基本就跟浏览器没有多大关系了,因为任何浏览器都支持这种方式.今天我们主要是讲解如果用CSS3样式表来实现圆角效果,值得 ...

  8. jquery foreach

    <form id="input_iForm" action="${pageContext.request.contextPath}/transfer/input_s ...

  9. MongoDB介绍及下载与安装

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.M ...

  10. android studio里的build.gradle基本属性

    //声明是android 程序 apply plugin: 'com.android.application' android { //编译SDK版本 compileSdkVersion 23 // ...