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:(相比隐式意图,此做法 ...
随机推荐
- mvn
http://blog.csdn.net/z69183787/article/category/2265961
- APP被苹果APPStore拒绝的各种原因
APP被苹果APPStore拒绝的各种原因 1.程序有重大bug,程序不能启动,或者中途退出.2.绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币.3.游戏里有实物奖励的话,一定要说清楚,奖励由本 ...
- 7 -- Spring的基本用法 -- 12...
7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...
- JQuery Easy Ui dataGrid 数据表格 -->转
转至: http://www.cnblogs.com/cnjava/archive/2013/01/21/2869876.html#events 数据表格 - DataGrid 内容 概况 使用方法 ...
- IOS开发-UI学习-NSMutableAttributedString(带属性的字符串)的使用
带属性的字符串: NSString *aa = @"hellochinaIloveYou!"; NSMutableAttributedString *mas = [[NSMutab ...
- TFS2013 升级至TFS2015及项目的创建
TFS2015已发布想体验下新特性 由于现有数据库已经是SQLSERVER2012 SP1 开发工具VS2013 都符合升级要求 现在体验下吧 1.先下载TFS2015 运行安装向导一路NEXT 直至 ...
- 安装pip工具
Python 2.7.9+ and 3.4+ Good news! Python 3.4 (released March 2014) and Python 2.7.9 (released Decemb ...
- Angular - - ngChange、ngChecked、ngClick、ngDblclick
ngChange 当用户更改输入时,执行给定的表达式.表达式是立即进行执行的,这个和javascript的onChange事件的只有在触发事件的变化结束的时候执行不同. 格式:ng-change=”v ...
- 强行在MFC窗体中渲染Cocos2d-x 3.6
[前言] 把Cocos2dx渲染到另一个应用程序框架中的方法,在2.x时代有很多大神已经实现了,而3.x的做法网上几乎找不着.这两天抽空强行折腾了一下,不敢独享,贴出来供大家参考. [已知存在的问题] ...
- jQuery基本过滤选择器
jQuery基本过滤选择器: <h1>this is h1</h1> <div id="p1"> <h2>this is h2< ...