需求分析:

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”

原文:https://www.cnblogs.com/loaderman/p/12156274.html

android 打开其它app,Android APP打开另一个APP的几种实现总结相关推荐

  1. android多App间多界面交互,一个APP如何适配多个Android终端?

    简介: 传统的多终端适配方案,是为大尺寸Pad开发一个特定的HD版本.但是目前支持Android系统的设备类型越来越丰富,不同类型的设备尺寸也越来越多样化,特定的HD版本并不能适配所有设备尺寸.App ...

  2. app开发周期需要多久 开发一个app要多长时间

    在移动互联网时代,手机成为主要的工具,各式各样的App快速改变着大家的生活,手机App开发自然成了市场热门需求.但是App开发技术门槛比较高,很多人并不了解细节.开发制作一款专业的手机App大概需要多 ...

  3. 「app开发价格」开发一个app到底需要多少钱

    1.一种是使用现成的模板进行修改:使用模板工作量较小,如果是一款功能简单,客户要求不太高的APP,只需要让美工对前台的页面进行一定程度的修改,最短一两天就能完成,费用最低2000元至3000元. 2. ...

  4. 实战APP微信支付服务商模式(一个APP多个商户收款)

    由于项目需要对接微信支付功能,需求是:一个APP实现不同商户进行收款,花时间去研究了下官方文档,决定采用微信支付APP服务商模式进行实现,开发时也踩了不少坑(参数顺序及大小写.签名的加密方式等),这里 ...

  5. iOS 从一个APP跳转到另一个APP,并带参数跳到指定页面

    功能实现:A跳到B并打开B中指定页面 步骤: 1.首先创建两个项目(项目A,项目B),在项目B中的info.plist文件中添加URL Types,如下图所示:其中URL idenifier是项目B的 ...

  6. android启动程序唤起其它app,安卓和rn唤起其他app应用

    对于app来说,很多时候都需要在本app中唤起其他app应用,本文简单的列举了安卓和react-native对于唤起其他app的一些做法. 安卓 1)url scheme唤起 使用场景: h5页面跳转 ...

  7. Android项目实战(二十二):启动另一个APP or 重启本APP

    Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...

  8. android手机打开java文件_Android Studio打开手机权限

    java.io.FileNotFoundException: /storage/emulated/0/xxx.mp3: open failed: EACCES (Permission denied) ...

  9. 开发一个APP多少钱?

    开发一个APP多少钱? 开发一个APP要多少钱?相信不光是客户有这个疑问,就算是一般的程序员也想知道答案.很多程序员想在业余时间接外包挣外快,但是他们常常不知道该如何定价,如何有说服力的要价.这是因为 ...

  10. 为什么有必要开发一个APP?

    在这个大数据的时代,APP占据了很重要的地位,APP被广泛应用到各行各业,许多传统的企业看透了互联网的商机,纷纷着手开发属于自己独立的APP客户端.为何APP开发如此火热?有必要开发一个APP吗? 关 ...

最新文章

  1. python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名
  2. 【Android】Camera 使用浅析
  3. 我的 atom 开发工具
  4. SQLServer之函数简介 1
  5. Spring事务操作-事务引入
  6. python 连续等于
  7. POST 方式上传图片
  8. ALTOVA XMLSPY使用,建xml文件,构建xpath和XQuery查询,xml和json格式转换
  9. java裁剪缩放图片代码下载
  10. QQ信任登陆注册开发者帐号
  11. DhtmlxGrid第一次接触,jsp页面
  12. 数据结构-学习笔记整理
  13. 机器学习——不可逆矩阵处理
  14. python开发PC端桌面应用
  15. 手机怎么解决同ip多账号_游戏工作室如何实现手游多开多窗口多IP
  16. 易语言超人气教程第一课(放弃语言之争)
  17. HTML5+JS游戏开发模块----canvas打字游戏
  18. 加州大学圣地亚哥分校计算机科学排名,加州大学圣地亚哥分校计算机科学硕士排名第18(2020年TFE Times排名)...
  19. 解决No such file or directory: /turtlebot3/turtlebot3_description/urdf/turtlebot3_.urdf.xacro
  20. 全网最详细SUMO仿真软件教程——入门篇

热门文章

  1. openwrt挂载U盘或SD卡作为根文件系统
  2. risc芯片 服务器,聚焦RISC架构 浅析IBM Power处理器历程
  3. 玻尔兹曼熵方程:一段从克劳修斯到普朗克的历史
  4. 必收藏!计算机保研时间轴!
  5. 雷锋网专访爱库网创始人徐建海
  6. 用Unity同时开发【微信小游戏】【安卓】【IOS】游戏#1.3 转换成微信小游戏
  7. 远程连接工具radmin2.2
  8. PL/SQL之块结构和组成元素
  9. 六安市高考成绩查询入口2021,六安高考成绩查询入口
  10. [机缘参悟-60]:《兵者,诡道也》-1-开篇:“死“与“生“都是天道