一个程序往往由多个界面组成,界面之间的跳转,实质是Activity之间的跳转。

从当前程序跳转到其它程序,实质是启动了目标程序的入口Activity。

Intent被称为意图,常用于组件之间的交互,可用于启动其它组件、程序,并可以在组件之间传递数据。

1、显式意图     直接指定要启动的目标组件

方式一:

   //参数:package的上下文对象,通常用this表示当前package的。目标Activity的class对象,不用写全类名
Intent intent=new Intent(this,Main2Activity.class);
startActivity(intent);

方式二:

   Intent intent=new Intent();

   //参数:package的上下文对象,目标Activity的class对象
  intent.setClass(this,Main2Activity.class);   //或者用另一个重载函数。package的上下文对象,全类名(String类型)。必须是全类名
  //intent.setClassName(this,"com.example.test.Main2Activity");   startActivity(intent);

以上两种方式均只能启动本程序中组件,不能启动其它程序的组件。(this限定了)

方式三:

1   Intent intent=new Intent();
  //包名,全类名。均为String型。只要是String型的类名,都要写成全类名。
3   intent.setClassName("com.example.test","com.example.test.Main2Activity");
  startActivity(intent);

方式四:

   Intent intent = new Intent();
  //创建一个组件对象。包名,全类名,均为String类型。
  ComponentName comp = new ComponentName("com.example.test","com.example.test.Main2Activity");
  //设置Intent的目标组件
  intent.setComponent(comp);
  startActivity(intent);

以上2种方式既可以启动本程序的其他组件,也可以启动第三方程序(的组件):将包名、全类名设置为其它程序的即可。

如果要启动第三方程序,全类名要是入口Activity的全类名。

只要参数是String类型的类名,就必须写成全类名。

2、隐式意图      并不直接指定要开启的目标组件,而是指定目标组件的action,系统根据action的映射关系启动某个组件/程序。

方式一:

  Intent intent=new Intent();
//指定目标组件的action的name,String类型。我这里写的是形参声明,实际使用时要替换为具体的字符串
intent.setAction(String action);
startActivity(intent);

方式二:

  //参数:目标Activity的action的name值,String类型
Intent intent = new Intent(String action);
startActivity(intent);

启动action值为指定值的组件。

以上2种方式可以启动本程序的其它Activity、也可以启动手机上的其它程序。

启动本程序中的其他Activity,需要自己在AndroidManifest.xml中给目标组件配置action

在AndroidManifest.xml中为目标组件配置<intent-filter>元素:

 <activity android:name=".Main2Activity">
<intent-filter>
<!--action元素标识此组件的分类,如果此组件是程序的入口Activity,则action元素可标识此程序的分类-->
<action android:name="test" />
<!--category的值有2个:一般是DEFAULT,表示这是一个普通的组件;LAUNCHER,表示这是此程序的入口组件-->
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

在AndroidManifest.xml中设置的Activity的action是Android系统共用的,就是说此action可以被其它程序引用。

action值可以是任意的字符串,但习惯这样写:  包名.常量名   ,常量名自己取,全大写,尽量见名知义。示例:cn.itcast.START_SECOND_ACTIVITY。

action值也可以使用预定义的值,这些预定义的值都是String类型的常量。

action更像是对组件/程序功能的分类,比如action是"浏览网页",现在我们通过隐式意图启动action是"浏览网页"的组件/程序:

如果手机上只有一个组件的action是"浏览网页"(即只有一个浏览器),则直接打开该浏览器。

如果有多个浏览器,但设置了默认应用,则直接打开默认浏览器。

如果有多个浏览器,但未设置默认应用,则会弹出对话框,显示action是"浏览网页"的所有组件/应用(即显示所有浏览器),让用户选一个。

我们可以给本程序的某个Activity指定唯一的action,这样通过该action可直接启动该组件。

预定义的action的组件往往是手机通用的功能(系统应用),比如读取联系人、打电话、发短信、发邮件、播放多媒体文件、浏览器等。预定义的action值往往不能直接像上面的2种方式一样:指定了action后就    startActivity(intent);   直接启动,常常要设置一些参数、传递一些数据后才能   startActivity(intent);    比如播放媒体文件,要先设置/传递 文件类型(audio/mp3)、文件位置。

startActivity()可以开启一个组件,也可以开启一堆组件:

startActivity(Intent  intent);

startActivity(Intent[]  intents);

下一篇随笔写如何获取第三方软件的包名、入口类名,下下篇随笔写如何使用预定义的action值。

Intent实现界面跳转、程序跳转的更多相关文章

  1. iOS之开发程序之间的跳转及跳转到appStore

    实例一:A程序跳转到B程序 第一步: 在B程序plist文件中,注册对外接口如图在B程序中找到info.plist点击,找到Information Property List ,右击 添加列表项 找到 ...

  2. 使用Intent实现Activity的显式跳转

    [正文] 这里以按钮实现活动跳转为例,为实现这个功能,我们需要三个步骤: 1.点击按钮才发生页面跳转,因此,第一步我们先要找到要点击的按钮 如何拿到按钮对象呢?通过资源id,前面我们提到过,在R.id ...

  3. APP跳转小程序,小程序跳转APP

    关注公共号,搜索 "APP跳转小程序,小程序跳转APP",查看原文 前置条件: 开发环境:windows 开发框架:uni-app , H5+,nativeJS,mpvue 编辑器 ...

  4. 让程序跳转到绝对地址0x100000去执行

    网上比较火的一个题,让程序跳转到绝对地址去执行 :可以的实现方式为: ( (void(*)())0x4110e6)(); (*(void(*)())0x4110e6)(); (*((void(*)() ...

  5. 微信小程序跳转小程序

    <navigator target="miniProgram" open-type="navigate" app-id="{{BappId}}& ...

  6. C语言实现程序跳转到绝对地址0x100000处执行

    嵌入式笔试题:想让程序跳转到绝对地址0x100000处执行,该如何做? 请详细解释一下所给的答案: 网上看到有如下答案: *((void(*)(void))0x100000)(); 经过在VC++6. ...

  7. 【转】STM32 - 程序跳转、中断、开关总中断

    程序跳转注意: 1.如果跳转之前的程序A里有些中断没有关,在跳转之后程序B的中断触发,但程序B里没有定义中断响应函数,找不到地址会导致死机. 2.程序跳转前关总中断,程序跳转后开总中断(关总中断,只是 ...

  8. 微信小程序 - 配置普通二维码跳小程序

    普通二维码跳小程序规则: https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html#%E5%8A%9F%E8%83%B ...

  9. 从A小程序跳转到B小程序

    从A小程序跳转到B小程序: A小程序 wxml: <navigator target="miniProgram" open-type="navigate" ...

随机推荐

  1. mysql 中varchar(50)最多能存多少个汉字

    首先要确定mysql版本4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节) 5.0版本以上,varchar(50),指的是50字符,无论存放 ...

  2. 优秀Java程序员必须了解的GC工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

  3. p1697食物链

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A.现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说法 ...

  4. 微信小程序开发之https从无到有

    本篇不讲什么是https,什么是SSL,什么是nginx 想了解这些的请绕道,相信有很多优秀的文章会告诉你. 本篇要讲的在最短的时间内,让你的网站从http升级到https. 开始教程前再说一句:ht ...

  5. 将svn的项目转移到另外一个仓库中

    前几天在做一个项目的时候,因为需要,需要将Server A 上SVN仓库 repos1中的项目pro1迁移到Server B 上的SVN仓库中,首先想到的是:通过复制,但是仔细一想,这样是不可能的:然 ...

  6. 内部锁之一:锁介绍(偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景)

    一.内部锁介绍 上篇文章<Synchronized之二:synchronized的实现原理>中向大家介绍了Synchronized原理及优化锁.现在我们应该知道,Synchronized是 ...

  7. bzoj3198

    容斥原理+哈希表 恰好k个,那么上容斥原理,我们先2^6枚举相同的位置,用哈希表判断有多少个对应位置相同的元素,然后用容斥原理计算,似乎这里的容斥没有那么简单,详见这里 http://www.cnbl ...

  8. Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.mao.PersonSet

    转自:https://blog.csdn.net/vipmao/article/details/51334743

  9. 量子纠缠1——量子比特、Bell态、EPR佯谬

    量子纠缠是量子物理的基本性质,他描述的是:当几个粒子相互作用后,无法单独描述各个粒子的性质,只能整体描述,本文主要介绍两个量子比特之间的纠缠. 量子比特(Qubit) 量子比特是量子计算的基本单位,就 ...

  10. 041--Jquery

    一.Jquery对象 jQuery 对象就是通过jQuery包装DOM对象后产生的对象.jQuery 对象是 jQuery 独有的. 如果一个对象是 jQuery 对象, 那么它就可以使用 jQuer ...