Android Intent (可通过URL启动 Activity)
Intent分为两大类:
(1)显性的(Explicit)
(2)隐性的(Implicit)
对于隐性意图,在某些时候, 应用程序只是想启动具有某种特征的组件, 并不想和某个特定的组件耦合. 使用Intent可以方便的达到这种高层次解耦的目的.(在模块间的组件启动)
intent定位事件的目的地:
(1)种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序。
(2)类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目标的重要依据。
(3)组件(component),前面的例子中用的是setClass,不过也可以用setComponent来设置intent跳转的前后两个类实例。
(4)附加数据(extras),在ContentURI之外还可以附加一些信息,它是Bundle类型的对象。
对于显性Intent:
//ComponentName comp = new ComponentName(FirstActivity.this, SecondActivity.class);
// 明确的指定了待启动的组件类, 此时的Intent属于显式intent
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
对于隐性Intent,分几步:
(1) 在清单文件中的application节点下的activity下添加intent-fileter,添加的结构:
1、 设置action
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.student.query.number" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="studentNumber" />
</intent-filter>
</activity>
通过指定action 来设置传参启动Activity:
1 // action
2 private final String studentQueryIntent = "com.student.query.number";
3 // data
4 Uri studentNumberUri = Uri.parse("student:12");
5 Intent intent = new Intent();
6 intent.setAction(studentQueryIntent);
7 intent.setData(studentNumberUri);
8 startActivity(intent);
2、
<activity android:name=".OtherActivity">
<intent-filter >
<action android:name="com.sample.student.other"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="student"
android:host="www.student.com"
android:port="8080"/>
<data android:scheme="other"/>
<data android:mimeType="text/*" />
</intent-filter>
</activity>
通过设置 URL 来启动相关
1 Intent intent = new Intent();
2 Uri data = Uri.parse("student://www.student.com:8080");
3 intent.setData(data);
4 intent.setDataAndType(data, "text/*");
5 startActivity(intent);
3、关于设置具体URL path:
1 <activity
2 android:name=".ui.user.LoginActivity"
3 android:screenOrientation="portrait"
4 android:theme="@style/AppTheme">
5 <intent-filter>
6 <action android:name="android.intent.action.VIEW"/>
7
8 <category android:name="android.intent.category.DEFAULT"/>
9 <category android:name="android.intent.category.BROWSABLE"/>
10
11 <!-- login -->
12 <data
13 android:host="www.testapp.com"
14 android:path="/user/login"
15 android:scheme="test"/>
16 </intent-filter>
17 </activity>
写启动方法的时候:
1 Uri uri = Uri.parse("test://www.testapp.com/user/login?userId=" + mUserId);
2
3 startActivity(new Intent(Intent.ACTION_VIEW, uri));
而被启动的Activity接收传参时:
1 String userId = getIntent().getData().getQueryParameter("userId");
getQueryParameter 只返回String 类型,所以要转换下类型。
注意:setData方法使用
//注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用。
//要么单独以 setData 方法设置 URI
intent.setData(uri);
//如何在<data>中多了一个android:mimeType="text/*", 此时不能使用intent.setData, 而要使用intent.setDataAndType();
intent.setDataAndType(uri, "text/plain");
//要么单独以 setDataAndType 方法设置 Type
intent.setType("text/plain");
设置了多个data,只要匹配一个就可以启动这个activity。
如果设置了
<data android:scheme="student"
android:host="www.student.com"
android:path="/studentNum"
android:port="8080"/>
必须完全匹配才能启动:
Uri data = Uri.parse("student://www.student.com:8080/studentNum");
如果设置了:
<data android:scheme="student" android:host="www.student.com"/>
那么以下URI都可以匹配:
Uri data = Uri.parse("student://www.student.com:80");
Uri data = Uri.parse("student://www.student.com:8800");
Uri data = Uri.parse("student://www.student.com");
如果只设置了:
<data android:scheme="student"/>
那么 以下URI 就可以匹配,后面也可以加其他参数:
Uri data = Uri.parse("test://");
如果设置了mimeType,那么必须使用 intent.setDataAndType(data, "text/*"); 启动activity。
对于<intent-filter>中的action项可以有多个只要匹配其中一个就可以了。
隐性Intent:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。
Android Intent (可通过URL启动 Activity)的更多相关文章
- 安卓入门 使用android创建一个项目 从启动activity中响应按钮事件 启动另一个activity 并传递参数
启动android studio创建一个新项目 public void sendMessage(View view){ Intent intent=new Intent(this,DispalyMes ...
- 【Android framework】am命令启动Activity流程
源码基于Android 4.4. am start -W -n com.dfp.test/.TEstActivity -W:等目标Activity启动后才返回 -n:用于设置Intent的Comp ...
- [android]Intent跳转新的Activity可以传递数据过去
两种方式: 一,直接通过Bundle对象来传递: 如果我们想要给“收件人”Activity说点什么的话,那么可以通过下面这封“E-mail”来将我们的消息传递出去 Intent intent=new ...
- android 21 隐式意图启动系统预定义activity
Intent intent=new Intent(LoginActivity.this, MainActivity.class);//显示意图启动,显示从一个activity到另一个activity, ...
- Android启动activity的4种模式(standard、singleTop、singleTask、singleINstance)
在AndroidManifest.xml中配置activity时,android:launchMode属性会指定启动activity的模式,有四种: standard singleTop single ...
- Android启动Activity的标准Action和标准Category
Android内部提供了大量标准的Action和Category常量. 其中用于启动Activity的标准Aciton及对应的字符串如下表所示: 启动Activity的标准Aciton Action常 ...
- 我的Android进阶之旅------>启动Activity的标准Action和标准Category
Android内部提供了大量标准的Action和Category常量. 除了参考本文外,您还可以参考了以下链接: http://developer.android.com/reference/andr ...
- 查看Android应用的package name和activity name方面
使用android自动化测试工具monkeyrunner启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法:方法一:使用a ...
- android的android.intent.action.MAIN
当我们使用Android Studio创建一个工程并生成一个Activity时,经常可以在清单文件中看到如下的代码 android.intent.action.MAIN:决定应用的入口Activity ...
随机推荐
- Android 中 Internal Storage 和 External Storage 的区别
Android 存储:Internal Storage的用法以及与External storage 的区别 - 庄宏基的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net ...
- java 泛型 -- 泛型类,泛型接口,泛型方法
泛型T泛型的许多最佳例子都来自集合框架,因为泛型让您在保存在集合中的元素上指定类型约束.在定义泛型类或声明泛型类的变量时,使用尖括号来指定形式类型参数.形式类型参数与实际类型参数之间的关系类似于形式方 ...
- 【翻译二】java--并发之进程与线程
Processes and Threads In concurrent programming, there are two basic units of execution: processes a ...
- x264 - 高品质 H.264 编码器
转自:http://www.5i01.cn/topicdetail.php?f=510&t=3735840&r=18&last=48592660 H.264 / MPEG-4 ...
- php随机生成验证码
我们经常需要服务器向前端发送验证码,验证码需要随机产生,下面的用简单的代码实现了这一过程: <?php $pool='0123456789abcdefghijklmnopqrstuvwxyzAB ...
- Bag-of-words模型
Bag-of-words模型是信息检索领域常用的文档表示方法.在信息检索中,BOW模型假定对于一个文档,忽略它的单词顺序和语法.句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立 ...
- C#中var和dynamic
var与dynamic这两个关键字,只是看起来很相似,仅此而已!var表示“变量的类型是在编译时决定的”,但是dynamic表 示“变量的类型是在运行时决定的”.因此,dynamic与var具有截然不 ...
- jbox使用总结
jbox是一个不错的插件 当使用get打开新页面的时候,可以使用h.对像ID来获得对像ID的值 Js代码 js代码: /** * @description: test * @author: BrinP ...
- NuGet学习笔记(3) 搭建属于自己的NuGet服务器
文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...
- RDS MySQL 全文检索相关问题的处理
RDS MySQL 全文检索相关问题 1. RDS MySQL 对全文检索的支持 2. RDS MySQL 全文检索相关参数 3. RDS MySQL 全文检索中文支持 3.1 MyISAM 引擎表 ...