需求分析:

1.A点击拉起B;

2.如果B没安装,下载安装;

3.如果B已安转,未在后台运行点击打开B,传值账号密码,做跨登录;

4.如果B已安装,且正在后台运行,A打开B直接显示在后台运行的页面;

1.A拉起B可实现的几种方法

(1)包名,特定Activity名拉起

Intent intent = newIntent(Intent.ACTION_MAIN);/**知道要跳转应用的包命与目标Activity*/ComponentName componentName= new ComponentName("cn.com.xxxx", "cn.com.xxxx.xxx.login.WelcomeActivity");

intent.setComponent(componentName);

intent.putExtra("", "");//这里Intent传值

startActivity(intent);

B应用需要在manifest文件对应Activity添加

android:exported="true"

(2)包名拉起(这里就是进去启动页)

Intent intent = getPackageManager().getLaunchIntentForPackage("cn.com.xxxx");if (intent != null) {

intent.putExtra("type", "110");

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

}

(3)url拉起

Intent intent = newIntent();

intent.setData(Uri.parse("csd://pull.csd.demo/cyn?type=110"));

intent.putExtra("", "");//这里Intent当然也可传递参数,但是一般情况下都会放到上面的URL中进行传递

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

B应用manifest文件需配置(注意:在原有intent-filter下方另外添加,不是在原先里面,两个同时存在)

android:host="pull.csd.demo"android:path="/cyn"android:scheme="csd" />

优点:不暴露包名   缺点:host path schemeA应用和B应用得提前规定

2.判断B应用是否安装

/*** 检查包是否存在

*

*@parampackname

*@return

*/

private booleancheckPackInfo(String packname) {

PackageInfo packageInfo= null;try{

packageInfo= getPackageManager().getPackageInfo(packname, 0);

}catch(PackageManager.NameNotFoundException e) {

e.printStackTrace();

}return packageInfo != null;

}

3.判断B应用是否在后台运行并直接打开

public staticIntent getAppOpenIntentByPackageName(Context context,String packageName){//Activity完整名

String mainAct = null;//根据包名寻找

PackageManager pkgMag =context.getPackageManager();

Intent intent= newIntent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED|Intent.FLAG_ACTIVITY_NEW_TASK);

List list =pkgMag.queryIntentActivities(intent,

PackageManager.GET_ACTIVITIES);for (int i = 0; i < list.size(); i++) {

ResolveInfo info=list.get(i);if(info.activityInfo.packageName.equals(packageName)) {

mainAct=info.activityInfo.name;break;

}

}if(TextUtils.isEmpty(mainAct)) {return null;

}

intent.setComponent(newComponentName(packageName, mainAct));returnintent;

}public staticContext getPackageContext(Context context, String packageName) {

Context pkgContext= null;if(context.getPackageName().equals(packageName)) {

pkgContext=context;

}else{//创建第三方应用的上下文环境

try{

pkgContext=context.createPackageContext(packageName,

Context.CONTEXT_IGNORE_SECURITY|Context.CONTEXT_INCLUDE_CODE);

}catch(PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

}returnpkgContext;

}public static booleanopenPackage(Context context, String packageName) {

Context pkgContext=getPackageContext(context, packageName);

Intent intent=getAppOpenIntentByPackageName(context, packageName);if (pkgContext != null && intent != null) {

pkgContext.startActivity(intent);return true;

}return false;

}

if (checkPackInfo("cn.com.xxxxx")) {

openPackage(this,"cn.com.xxxxx");

}else{

Toast.makeText(this, "没有安装" + "",Toast.LENGTH_LONG).show();//TODO 下载操作

}

这里运用的是模拟点击图标启动,不会出现程序多开,和栈顶Activity重复或者顺序错乱的问题。

当然Activity的LaunchMode最好设为“singletop”

点击安装一个android app,Android APP打开另一个APP的几种实现总结相关推荐

  1. android程序中实现打开另一个app

    1.已知要打开的apk的包名 String packetName = "com.onedollar.smartnurse"; Intent intent = getActivity ...

  2. android在程序中打开另一个程序

    在开发android应用的时候,在一些情况下要有前置条件,比如这边所说的要启动时要确保别的应用程序服务已经打开  或者在操作中启动别的应用等. 先来一段google上的代码: 1. 已知包名和类名的情 ...

  3. CAD2018安装计算机黑屏,3dmax2018一打开就闪退的三种原因和解决方法

    3dmax2018一打开就闪退的原因是什么?3dmax可以说是每个设计师都需要频繁使用到的软件,如果无法正常运行,会干扰到工作的进度.有些时候,一打开3dmax2018版,就会出现黑屏,或者闪一下就关 ...

  4. 打开个税App:竟要补税两万多...

    「 点击图片获取最近两年爆款好文 」 想必很多读者都知道,最近大家都在讨论一个话题:就是个税汇缴.通过个税APP可以查看自己2019年年度缴纳的个人所得税的记录,然后还可以看到个人可以退税的金额,如果 ...

  5. java开发app启动跳转到一个广告,Android实现点击通知栏后,先启动应用再打开目标Activity...

    情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,并设置点击 ...

  6. android点击另一个app,Android 怎么从一个APP中打开另外一个APP

    Android 如何从一个APP中打开另外一个APP 众所周知,在一个APP内部,从一个页面跳转到另外一个页面是使用startactivity函数来实现的. 同样的,对于应用之间的跳转也是如此的.应用 ...

  7. android 代码 卸载app,Android在一个app中安装并卸载另一个app的示例代码

    Android在一个app中安装并卸载另一个app 1.在app→src→main下新建文件夹asserts,将准备安装的apk文件放在asserts内 2.在app→src→main→res下新建文 ...

  8. 【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP

    目录 第一部分.前言 1.目标效果 2.准备知识 第二部分.详细步骤 1.新建Empty工程 ​2.添加资源文件 3.搭建注册界面 4.搭建登录界面 5.编写注册界面和登录界面的代码 6.设置APP初 ...

  9. android 打开其它app,Android 在一个APP里打开另一个APP

    前言 不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢? 运行效果图 正文 为了测试这个功能,首先要创建两个项目, ...

  10. android 模拟点击第三方app,Android实现打开第三方app

    前言 在android开发过程中,我们有时会涉及到在本应用中打开第三方应用的需求,那么这里我封装了一个工具类--AppHelper,用于实现获取本设备中app安装列表及在本应用中打开第三方应用的功能, ...

最新文章

  1. LSD-SLAM 编译过程(Ubuntu 14.04 + ROS Indigo
  2. zuul框架设计与实现
  3. context-param和init-param区别
  4. js中String的常用扩展
  5. outlook里面邮件不能显示图片
  6. linux mmap 内存映射
  7. logback高级特性使用-异步记录日志
  8. SQL Server各个版本功能比较
  9. nowcoder 牛牛的最大兴趣组 质因子 + 思维
  10. 知识图谱最新权威综述论文解读:开篇部分
  11. Neutron的Port详解
  12. FineReport学习-练习05-超级链接
  13. python中print输出变量_python中如何使用print函数?
  14. 01 ArcGIS空间分析--水文分析--利用水文分析方法提取山谷山脊线
  15. VMWare虚拟机 网络连接模式
  16. 【C++ Caffe】ubuntu下MNIST训练结果
  17. tm4c123gxl库函数调包侠养成(四)——————串口发送的基本配置
  18. java计算机毕业设计旅游信息网站源程序+mysql+系统+lw文档+远程调试
  19. 【财富空间】曾国藩:三分精明,七分厚道,做人最高境界
  20. 数据仓库专题(1)-数据仓库生命周期模型

热门文章

  1. 2017年双十一最全面的大数据分析报告在此!+2018年双十一已经开始,厚昌竞价托管教你如何应对流量流失?+2019年双十一大战一触即发:阿里、京东都有哪些套路和玩法
  2. VulnHub渗透测试实战靶场 - THE ETHER: EVILSCIENCE
  3. 抖音起号技巧实操课:可以直接上手的注册与养号的方法和技巧
  4. 按键控制led灯亮灭c语言实验报告,通过按键控制LED灯的实验
  5. Truthful Double Spectrum Auction (TDSA)
  6. 阿里巴巴高并发架构,到底如何对抗双十一亿级并发流量
  7. 从冯导撕逼和李安120帧电影说起,聊聊VR电影的发展
  8. 互联网商城盲盒app开发2021年为什么异常火爆?
  9. 如果卡通人物也玩抖音,你猜他们会经历什么?
  10. JS--图片轮播效果