显式跳转

是在已知包名和类名的情况下常用的跳转方法:

  1. Intent mIntent = new Intent();
  2. mIntent.setClassName("com.android.settings","com.android.settings.Settings");
  3. mContext.startActivity(mIntent);

我们也常这么用:

  1. Intent intent = new Intent(mContext, XXActivity.class);
  2. startActivity(intent);

这是跳转到当前应用的某个Activity,相信大家都十分熟悉,今天主要讲的是如何使用隐式intent意图跳转

隐式跳转

1、隐式跳转之Action跳转

假定有一个Activity在清单中是这样的声明的:
  1. <activity android:name=".ActionActivity";
  2. <intent-filter
  3. action android:name="customer_action_here"
  4. </intent-filter>
  5. </activity>
 

那么我们就可以使用以下代码进行跳转到上面这个Activity中:

  1. //创建一个隐式的 Intent 对象:Action 动作
  2. Intent intent = new Intent();
  3. //设置 Intent 的动作为清单中指定的action
  4. intent.setAction("customer_action_here");
  5. startActivity(intent);
 

2、隐式跳转之Category跳转

假定有一个Activity在清单中是这样声明的:
  1. <activity android:name=".CategoryActivity" >
  2. <intent-filter>
  3. <action android:name="customer_action_here" />
  4. <category android:name="customer_category_here" />
  5. </intent-filter>
  6. </activity>

我们可以使用如下代码进行跳转到以上Activity:

  1. //创建一个隐式的 Intent 对象:Category 类别
  2. Intent intent = new Intent();
  3. intent.setAction("customer_action_here");
  4. //添加与清单中相同的自定义category
  5. intent.addCategory("customer_category_here");
  6. startActivity(intent);

3、隐式跳转之Data跳转

假定有一个Activity是这样定义的:
  1. < activity android:name=".DataActivity">
  2. < intent-filter>
  3. < category android:name="android.intent.category.DEFAULT" />
  4. < data
  5. android:scheme="content"
  6. android:host="com.example.intentdemo"
  7. android:port="8080"
  8. android:pathPattern=".*pdf"
  9. android:mimeType="text/plain"/>
  10. < /intent-filter>
  11. < /activity>

我们可以使用如下代码进行跳转:

  1. //创建一个隐式的 Intent 对象,方法四:Date 数据
  2. Intent intent = new Intent();
  3. Uri uri = Uri.parse("content://com.example.intentdemo:8080/abc.pdf");
  4. //注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用
  5. //单独以 setData 方法设置 URI
  6. //intent.setData(uri);
  7. //单独以 seType 方法设置 Type
  8. //intent.setType("text/plain");
  9. //上面分步骤设置是错误的,要么以 setDataAndType 方法设置 URI 及 mime type
  10. intent.setDataAndType(uri, "text/plain");
  11. startActivity(intent);
 

清单中的port及以下属性时可选的,没有必要一定添加,但是添加了port及以下属性的话,java代码中的Uri中要做相应的匹配。

 

4、隐式跳转之调用系统应用

4.1 使用浏览器浏览网页

  1. //web浏览器
  2. Uri uri= Uri.parse("http://www.baidu.com");
  3. Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  4. startActivity(intent);

4.2 调用地图

  1. //打开地图查看经纬度
  2. Uri uri = Uri.parse("geo:38.899533,-77.036476");
  3. Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  4. startActivity(intent);

4.3 调用电话拨号(不需要拨号权限)

  1. Uri uri = Uri.parse("tel:10086");
  2. Intent intent = new Intent(Intent.ACTION_DIAL, uri);//注意区别于下面4.4的action
  3. startActivity(intent);

4.4 调用电话直接拨号(需要拨号权限)

  1. Uri uri = Uri.parse("tel:15980665805");
  2. Intent intent = new Intent(Intent.ACTION_CALL, uri);//注意区别于上面4.3的aciton
  3. startActivity(intent);

4.5 调用短信程序(无需发送短信权限,接收者自填)

  1. Intent intent = new Intent(Intent.ACTION_VIEW);
  2. intent.putExtra("sms_body", "这里写短信内容");
  3. intent.setType("vnd.android-dir/mms-sms");
  4. startActivity(intent);

4.6 调用短信程序(无需发送短信权限)

  1. Uri uri = Uri.parse("smsto:10086");//指定接收者
  2. Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
  3. intent.putExtra("sms_body", "你这个黑心运营商");
  4. startActivity(intent);

4.7 调用邮件程序

  1. Intent intent = new Intent(Intent.ACTION_SENDTO);
  2. intent.setData(Uri.parse("mailto:xxx@gmail.com"));
  3. intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
  4. intent.putExtra(Intent.EXTRA_TEXT, "这是内容");
  5. startActivity(intent);

4.8 调用音乐播放器

  1. Intent intent = new Intent(Intent.ACTION_VIEW);
  2. //Uri uri = Uri.parse("file:///sdcard/xiong_it.mp4");
  3. Uri uri = Uri.parse("file:///sdcard/xiong_it.mp3");
  4. intent.setDataAndType(uri, "audio/mp3");
  5. startActivity(intent);

4.9 调用视频播放器

  1. Intent intent = new Intent(Intent.ACTION_VIEW);
  2. //Uri uri = Uri.parse("file:///sdcard/xiong_it.mp3");
  3. Uri uri = Uri.parse("file:///sdcard/xiong_it.mp4");
  4. intent.setDataAndType(uri, "video/mp4");
  5. startActivity(intent);
 

调用视频播放器和音乐播放器的区别在setDataAndType()时一个是audio类型,一个是video类型,很容易记住,不允许使用其他意思相近的单词代替,代替无效。

4.10 调用搜索

  1. Intent intent = new Intent();
  2. intent.setAction(Intent.ACTION_WEB_SEARCH);
  3. intent.putExtra(SearchManager.QUERY, "android");
  4. startActivity(intent);

总结

相信大家经过上面的介绍,已经对Intent跳转有了一个比较成熟的理解,Intent是组件之间的纽带,使用它可以让系统替我们完成很多工作,不需要我们来指定完成工作的程序。实际上,我们会发现,调用系统程序使用液无非是隐式跳转,只不过使用的是系统内置的一些Action,Uri,Data等信息而已。希望对大家有所帮助。

Android开发:显式/隐式Intent的更多相关文章

  1. 安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?

    一.首先检查我们的代码: FirstActivity.java(主活动程序当中的代码):Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行 ...

  2. 学习安卓开发[4] - 使用隐式Intent启动短信、联系人、相机应用

    在上一篇学习安卓开发[3] - 使用RecyclerView显示列表中了解了在进行列表展示时RecyclerView的使用,本次记录的是在应用中如何通过隐式Intent调用其它应用的功能,比如发短信. ...

  3. Android 显示意图和隐式意图的区别

    意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么.        意图的作用:        1.激活组件   ...

  4. Android中显示和隐式Intent的使用

    显示启动activity                                                                                         ...

  5. Android 8.0对隐式广播的进一步限制

    项目targetSdkVersion升级到26后,对应的的是Android O版本,即Android 8.0系统.经测试发现针对8.0及以上安卓版本手机,AndroidMainfest.xml中静态注 ...

  6. Android开发笔记(7)——Intent启用应用软件

    转载请注明:http://www.cnblogs.com/igoslly/p/6844154.html Intent启用应用软件 intent可以用来要求其他应用组件完成特定工作,如相机.电话.地图等 ...

  7. Android开发点滴 - 实现层级式导航(API 16+)

    在Jelly Bean(API 16)以前,为了实现顶部的导航菜单,程序员们不得不手工写代码, 神马在OnCreate啊,神马onOptionsItemSelected啊,但是,现在一切都是浮云了. ...

  8. C++显式隐式构造函数

    https://blog.csdn.net/starlee/article/details/1331268#comments

  9. Android开发探秘之四:利用Intent实现数据传递

    在Android开发过程中,很多人都熟悉Intent,这是个用于在多个View之间共享数据的类.本节主要是继承上节,通过点选ListView中的文本,把文本中的URL加载到一个新的页面上,并且打印出来 ...

随机推荐

  1. Pearson product-moment correlation coefficient in java(java的简单相关系数算法)

    一.什么是Pearson product-moment correlation coefficient(简单相关系数)? 相关表和相关图可反映两个变量之间的相互关系及其相关方向,但无法确切地表明两个变 ...

  2. odoo 的时差 坑 [updated]

    很多人掉进了odoo的时间坑 odoo约定关于日期的数据,存放在数据库时,以 utc0 时区也就是不带时区存放,应用程序读取日期展示日期时,转换成用户的时区展示.用户的时区通过context传递. o ...

  3. Num 34 : HDOJ : 1205 吃糖果 [ 狄利克雷抽屉原理 ]

           抽屉原理:          桌上有十个苹果,要把这十个苹果放到九个抽屉里,不管如何放,我们会发现至少会有一个抽屉里面至少放两个苹果.          这一现象就是我们所说的" ...

  4. Android对apk源代码的改动--反编译+源代码改动+又一次打包+签名【附HelloWorld的改动实例】

    最近遇到了须要改动apk源代码的问题,于是上网查了下相关资料.编写了HelloWorld进行改动看看可行性,经过实验证明此方案可行,而且后来也成功用这种方法对目标apk进行了改动,仅仅只是须要改动的部 ...

  5. Linux下Tun/Tap设备通信原理

    Tun/Tap都是虚拟网卡,没有直接映射到物理网卡,是一种纯软件的实现.Tun是三层虚拟设备,能够处理三层即IP包,Tap是二层设备,能处理链路层网络包如以太网包.使用虚拟网络设备,可以实现隧道,如O ...

  6. 基于OpenCL的深度学习工具:AMD MLP及其使用详解

    基于OpenCL的深度学习工具:AMD MLP及其使用详解 http://www.csdn.net/article/2015-08-05/2825390 发表于2015-08-05 16:33| 59 ...

  7. Selenium学习(一)环境搭建

    一.安装selenium有两种方式: 1.pip install -U selenium(网络条件好) 2.下载selenium安装包,通过python setup.py install(压缩包)或p ...

  8. 通过JAVA调用命令行程序

    这是我在把数据导入到数据库时遇到问题,总结下来的.包含两个方法,一个方法是读取文件路径下的文件列表,主方法是执行cmd命令,在导入时想得到导入一个文件的时间,涉及到线程阻塞问题,这个问题理解不是很深, ...

  9. UltimateRecyclerView的用法具体解释

    近期在用非常多第三方库的时候,发现有一些附带的demo写的不是非常全面或者样例的代码太多,凝视太少,要想使用还要去看下源代码什么的(.. .用第三方开源库不就是想节省时间嘛).所以决定每周两到三篇.写 ...

  10. On ROWNUM and Limiting Results

    This issue's Ask Tom column is a little different from the typical column. I receive many questions ...