android之intent显式,显式学习
intent,意图 当从一个Activity到另一个Activity时调用,这里重点学习显式,隐式的使用
使用语句上的区别:
隐式意图: 显式意图:
setAction 跳转到其他应用:setClassName
setData 跳转到自己应用:setClass
addCategory(当为DEFAULT时可无)
一、无参时的显式、隐式举例
显式-到自己应用(最简单情况):
/*
* 跳转到自己的应用activity
* 在本应用中跳转:ActivitySecond.java
* 显式跳转:直接指定目标Activity的包名和类名
*/
public void onClick2(View v){
Intent intent = new Intent();
//上下文对象:this
//cls:直接指定目标Activity的类名:ActivitySecond
intent.setClass(this, ActivitySecond.class); startActivity(intent);
}
显式-到其他应用(记得加权限):
/*
* 显式跳转至拨号器
*/
public void onClick3(View v){
Intent intent = new Intent();
//指定目标的Activity的包名和类名
intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
startActivity(intent);
}
隐式(无参数传递,最简单情况)
/*
* 隐式跳转至拨号器
*/
public void onClick4(View v){
Intent intent = new Intent();
//隐式设置拨号器的动作
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);
}
二、有参数时隐式传递
三个参数:清单文件的:name 《=====》java文件的setAction
scheme《=====》 setData
mimeType《=====》 setType
必须保证一一匹配,必须一一对应
当然还有两个并列原则:
(1)外部: <intent-filter > </intent-filter >和<intent-filter > </intent-filter >并列
(2)内部:<intent-filter > </intent-filter >中如
<action android:name="com.wsq.dial"/>
<action android:name="com.wsq.dial1"/>
<data android:scheme="wsq" />
<data android:scheme="wsq1" />两个中任意匹配一个即可
举例说明:
1)需改变清单文件(隐式跳转至自己应用(无类型)匹配第一对intent-filter
此时清单文件第一对intent-filter:
<!-- 并列匹配第一种情况 (没有加类型) -->
<intent-filter >
<action android:name="com.wsq.dial"/>
<action android:name="com.wsq.dial1"/>
<data android:scheme="wsq" />
<data android:scheme="wsq1" /> <category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
java中对应代码为:
/*
* 隐式跳转至拨号器
* 需要在清单文件添加东西
*/
public void onClick5(View v){
Intent intent = new Intent();
//下面两/三条语句的形参必须和清单文件中保持一致
//隐式设置拨号器的动作
//name=dial/dial1 ,scheme=wsq:**/wsq1:**任意匹配即可
intent.setAction("com.wsq.dial");
intent.setData(Uri.parse("wsq1:only "));
//系统会自动添加默认的category(可有可无)
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
}
2)需改变清单文件(隐式跳转至自己应用(有 类型)匹配第二对intent-filter)
此时清单文件第二对intent-filter:
<!-- 并列匹配第二种情况 加类型 -->
<intent-filter >
<action android:name="com.wsq.dial3"/>
<data android:scheme="wsq3" android:mimeType="text/username"/> <category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
java中对应代码为:
/*
* 有类型参数传递
* 隐式跳转至SecondActivity
* 需要在清单文件添加东西
* name=dial3 ,scheme=wsq:**,mimeType="text/username"
*/
public void onClick6(View v){
Intent intent = new Intent();
//下面两/三条语句的形参必须和清单文件中保持一致
//隐式设置拨号器的动作
intent.setAction("com.wsq.dial3"); /*
* 该两者不能共生,所以使用一个综合性的方法替代
* intent.setData(Uri.parse("wsq:paopao"));
intent.setType("text/username");
*/
intent.setDataAndType(Uri.parse("wsq3:paopao"), "text/username");
//系统会自动添加默认的category(可有可无)
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
}
注意的是intent.setData和intent.setType不能同时存在,使用综合方法代替了
三、对上述两种传参的响应:
在SecondActivity.java中接收意图intent,获取到启动这个Activity的意图:MainActivity中的Intent
//,只针对5,6按钮,不针对第二个按钮因为无数据传过来,如果点击发生错误
//获取到启动这个Activity的意图:MainActivity中的Intent
Intent intent = getIntent();
Uri uri =intent.getData();
//打印显示按钮6传过来的参数
System.out.println(uri.toString());
需要注意的是,第二个按钮(最简单情况无参传递)是无参的,所以该响应不能接收到数据,所以该响应只针对上述两种有参数传递的意图
四、效果:
有参数的响应:
五、代码:
package com.wsq.jumpSecondactivity; import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*
* 跳转到第二个activity:打电话
* 隐式跳转
* 使用setAction和setData
*/
public void onClick1(View v){
Intent intent = new Intent();
//
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:110")); //英文字符
//跳转
startActivity(intent);
}
/*
* 跳转到自己的应用activity
* 在本应用中跳转:ActivitySecond.java
* 显式跳转:直接指定目标Activity的包名和类名
*/
public void onClick2(View v){
Intent intent = new Intent();
//上下文对象:this
//cls:直接指定目标Activity的类名:ActivitySecond
intent.setClass(this, ActivitySecond.class); startActivity(intent);
}
/*
* 显式跳转至拨号器
*/
public void onClick3(View v){
Intent intent = new Intent();
//指定目标的Activity的包名和类名
intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
startActivity(intent);
} /*
* 隐式跳转至拨号器
*/
public void onClick4(View v){
Intent intent = new Intent();
//隐式设置拨号器的动作
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);
} /*
* 隐式跳转至拨号器
* 需要在清单文件添加东西
*/
public void onClick5(View v){
Intent intent = new Intent();
//下面两/三条语句的形参必须和清单文件中保持一致
//隐式设置拨号器的动作
//name=dial/dial1 ,scheme=wsq:**/wsq1:**任意匹配即可
intent.setAction("com.wsq.dial");
intent.setData(Uri.parse("wsq1:only "));
//系统会自动添加默认的category(可有可无)
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
}
/*
* 有类型参数传递
* 隐式跳转至SecondActivity
* 需要在清单文件添加东西
* name=dial3 ,scheme=wsq:**,mimeType="text/username"
*/
public void onClick6(View v){
Intent intent = new Intent();
//下面两/三条语句的形参必须和清单文件中保持一致
//隐式设置拨号器的动作
intent.setAction("com.wsq.dial3"); /*
* 该两者不能共生,所以使用一个综合性的方法替代
* intent.setData(Uri.parse("wsq:paopao"));
intent.setType("text/username");
*/
intent.setDataAndType(Uri.parse("wsq3:paopao"), "text/username");
//系统会自动添加默认的category(可有可无)
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
}
}
MainActivity.java
package com.wsq.jumpSecondactivity; import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; public class ActivitySecond extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//,只针对5,6按钮,不针对第二个按钮因为无数据传过来,如果点击发生错误
//获取到启动这个Activity的意图:MainActivity中的Intent
Intent intent = getIntent();
Uri uri =intent.getData();
//打印显示按钮6传过来的参数
System.out.println(uri.toString());
}
}
ActivitySecond.java
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wsq.jumpSecondactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.CALL_PHONE"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 主入口 -->
<activity
android:name=".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> <!-- 第二个入口, -->
<!--.ActivitySecond 等价于android.intent.action.ActivitySecond -->
<activity android:name=".ActivitySecond">
<intent-filter >
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
<!-- 并列匹配第一种情况 (没有加类型) -->
<intent-filter >
<action android:name="com.wsq.dial"/>
<action android:name="com.wsq.dial1"/>
<data android:scheme="wsq" />
<data android:scheme="wsq1" /> <category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
<!-- 并列匹配第二种情况 加类型 -->
<intent-filter >
<action android:name="com.wsq.dial3"/>
<data android:scheme="wsq3" android:mimeType="text/username"/> <category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>"
</application> </manifest>
清单文件.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是主activity" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打电话(隐式跳转至其他应用)"
android:onClick="onClick1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显式跳转至自己应用"
android:onClick="onClick2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显式跳转至其他应用"
android:onClick="onClick3" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="隐式跳转至其他应用"
android:onClick="onClick4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="需改变清单文件(隐式跳转至自己应用(无类型)匹配第一对intent-filter)"
android:onClick="onClick5" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="需改变清单文件(隐式跳转至自己应用(有 类型)匹配第二对intent-filter)"
android:onClick="onClick6" />
</LinearLayout>
Main布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="第二个activity"
android:ems="10" > </TextView> </LinearLayout>
Second布局文件
android之intent显式,显式学习的更多相关文章
- Android开发:显式/隐式Intent
显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...
- Android沉浸式(侵入式)标题栏(状态栏)Status(一)
Android沉浸式(侵入式)标题栏(状态栏)Status(一) 现在越来越多的APP设计采用这种称之为沉浸式状态栏(Status)的设计,这种沉浸式状态栏又称之"侵入式"状 ...
- Android沉浸式(侵入式)标题栏(状态栏)Status(三)
Android沉浸式(侵入式)标题栏(状态栏)Status(三) 从附录文章1,2可以看到,依靠Android系统提供的标准方案,状态栏即便在透明状态下,仍然有些半透明而不是全透明.本文是And ...
- Android沉浸式(侵入式)标题栏(状态栏)Status(二)
Android沉浸式(侵入式)标题栏(状态栏)Status(二) 附录1以xml写style实现了Android沉浸式(侵入式)状态栏(标题栏),同样以上层Java代码实现.在附录文章1的基础上 ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一)
原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一) 写下此文章只为了记录Surging微服务学习过程,并且分享给广大想学习surging的基友,方便广大 ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)
原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...
- Android 自动取色并设置沉浸式状态栏
Android 自动取色并设置沉浸式状态栏 - Stars-One的杂货小窝 最近在进行产品的优化,也是研究了下沉浸式状态栏的实现方法及自动取色,记录一下笔记 设置沉浸式状态栏 1.添加依赖 这里,是 ...
- 一起学Android之Intent
本文简述在Android开发中Intent的常见应用,仅供学习分享使用. 什么是Intent? Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Inten ...
- Android 之 Intent(意图)
Intent是 Android中重要的桥梁之一,它分为显式意图和隐式意图.接下来分别针对这两种意图进行讲解. 显式意图:通过指定一组数据或动作,激活应用内部的 activity:(相比隐式意图,此做法 ...
随机推荐
- Tomcat热部署:Maven项目一键部署到Tomcat服务器 - 支持多环境
参考:Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署 命令 debug模式设置关联源码 eclipse --> 项目右键 --> Debug As --& ...
- IOS 股票K线图、分时图
IOS 股票K线图.分时图,网上开源项目很少,质量也是参差不齐:偶尔搜索到看似有希望的文章,点进去,还是个标题党:深受毒害.经过一段时间的探索,终于在开源基础上完成了自己的股票K线图.分时图: 先放出 ...
- Java 汉子转拼音
1. 引入: pinyin4j-1.1.0 包; http://pan.baidu.com/s/1eQ8a874 2. 转换; private static String ChineseToPiny ...
- iOS真机调试配置
啊!生活不易啊~~~~据说这个过程都可以当做简历技能了... 准备:已经具备了企业开发者账号,和相关证书 目标:让爪机可以真机调试 过程:1.登录官方开发网站 https://developer.ap ...
- 从底层谈WebGIS 原理设计与实现(三):WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理(转载)
从底层谈WebGIS 原理设计与实现(三):WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理 1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法, ...
- Memcached操作以及用法
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...
- OSG实现场景漫游(转载)
OSG实现场景漫游 下面的代码将可以实现场景模型的导入,然后在里面任意行走,于此同时还实现了碰撞检测. 源代码下载地址: /* * File : Travel.cpp * Description : ...
- Nginx 限流
原文链接:http://colobu.com/2015/10/26/nginx-limit-modules/?utm_source=tuicool&utm_medium=referral 电商 ...
- CentOS6+MySQL5.6二进制安装
一般我们安装mysql采用二进制安装的方式就足以满足我们的生产环境了,不过需要我们配置my.cnf文件 从官网下载二进制MySQL,选择Linux-Generic,最后这两个是二进制包 http:// ...
- 用 NodeJS 实现 BigPipe
BigPipe 是 Facebook 开发的优化网页加载速度的技术.网上几乎没有用 node.js 实现的文章,实际上,不止于 node.js,BigPipe 用其他语言的实现在网上都很少见.以至于这 ...