Android跨应用启动实例详解-创新互联

Android跨应用启动

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网络空间、营销软件、网站建设、青山湖网站维护、网站推广。

前言:

相信大家,很多时候都是在自己的应用中,启动自己写的Activity,Service、BroadcastReceiver、contentProvider 。换句话说,这些都只是 * 单个应用中 组件间 * 的启动。而我们下面要谈论的是 两个应用间 组件 的启动。即——使用 隐式Intent方式 启动应用B的某个组件。

一、在开始之前,先来梳理一下跨应用启动的2种方式:

第一种:在Activity中,启动另一个app的组件。

Android跨应用启动实例详解

第二种:在Service中,启动另一个app的组件。

Android跨应用启动实例详解

从所周知,Android中有四大组件,那么为什么小编,只介绍Activity和Service中启动另一个应用的四大组件?


其实,BroadcastReceiver组件也是可以启动 4大组件的。这是因为onReceive()方法中会要求传入context实例,有了context实例,就能使用context的方法,启动其他组件。


至于contentProvider,我想大家还没见过,这娃自动去干过事情吧,都是被动的调用。


所以在写代码的时候,我们经常会在Activity或者Service中去启动一个组件,BroadcastReceiver很少,而contentProvider更是没见过。


另外需要跟大家说一下,Context类是一个抽象类,传入的context实例是由其子类来实现的,这种——用父类声明变量,由子类来实现的思维方式,在Java中是很常见的。特别是接口和抽象类,经常用到这种方式。对于小编这种由C转Java的人来说,真是一大坑啊。


为什么Activity和Service都可以直接使用图中的四个方法呢,这是因为Activity和Service都是继承自ContextWrapper,所以子类拥有父类的方法。BroadcastReceiver和contentProvider则不是,具体大家可以看官方API。


二、跨应用启动的实战

** 下面让我们正式进入今天的主题:跨应用启动实战**

1:AppA的Activity中,启动AppB的Activity

Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航。这个场景在现实中作用很大,尤其是朋友在陌生的环境找不到对方时,这个功能简直就是救星。

本来想把本文的名字叫启动另一个进程中的Activity,觉得这样才有逼格。因为每个App都会运行在自己的虚拟机中,每个虚拟机跑在一个进程中。但仔细一想,能够称为一个进程,前提是这个App必须要运行起来才行。而Android提供的能力,是不需要另一个App启动就可以将其特定的Activity启动起来的。

也就是说B应用是处理未启动的状态,也就是还没有成为系统的一个进程,那么当使用A启动B应用的某个组件时,请问,B应用是否成为系统的进程?答案是yes。怎么看呢,可以从Android Studio 的Android device monito 中结合虚拟机看。

Android跨应用启动实例详解

我们有至少两种办法达到启动另一个App中的Activity。

第一种———隐式Intent的action方式。

相信这种方式,大家都不会陌生。这里就不进行过多的解析。这里只贴一下AppB的manifest(文件清单):

Android跨应用启动实例详解

从文件清单中,我们可以看到,appB中有两个Activity。其中SecondActivity就是要被appA启动的Activity。
那么我们只要在appA的任意一个组件(Activity或Service),做如下的调用:

Intent intent=new Intent("android.intent.action.SecondActivity");
startActivity(intent);

分享名称:Android跨应用启动实例详解-创新互联
分享路径:http://myzitong.com/article/csidpo.html