点击安装一个android app,Android APP打开另一个APP的几种实现总结
需求分析:
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的几种实现总结相关推荐
- android程序中实现打开另一个app
1.已知要打开的apk的包名 String packetName = "com.onedollar.smartnurse"; Intent intent = getActivity ...
- android在程序中打开另一个程序
在开发android应用的时候,在一些情况下要有前置条件,比如这边所说的要启动时要确保别的应用程序服务已经打开 或者在操作中启动别的应用等. 先来一段google上的代码: 1. 已知包名和类名的情 ...
- CAD2018安装计算机黑屏,3dmax2018一打开就闪退的三种原因和解决方法
3dmax2018一打开就闪退的原因是什么?3dmax可以说是每个设计师都需要频繁使用到的软件,如果无法正常运行,会干扰到工作的进度.有些时候,一打开3dmax2018版,就会出现黑屏,或者闪一下就关 ...
- 打开个税App:竟要补税两万多...
「 点击图片获取最近两年爆款好文 」 想必很多读者都知道,最近大家都在讨论一个话题:就是个税汇缴.通过个税APP可以查看自己2019年年度缴纳的个人所得税的记录,然后还可以看到个人可以退税的金额,如果 ...
- java开发app启动跳转到一个广告,Android实现点击通知栏后,先启动应用再打开目标Activity...
情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,并设置点击 ...
- android点击另一个app,Android 怎么从一个APP中打开另外一个APP
Android 如何从一个APP中打开另外一个APP 众所周知,在一个APP内部,从一个页面跳转到另外一个页面是使用startactivity函数来实现的. 同样的,对于应用之间的跳转也是如此的.应用 ...
- android 代码 卸载app,Android在一个app中安装并卸载另一个app的示例代码
Android在一个app中安装并卸载另一个app 1.在app→src→main下新建文件夹asserts,将准备安装的apk文件放在asserts内 2.在app→src→main→res下新建文 ...
- 【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP
目录 第一部分.前言 1.目标效果 2.准备知识 第二部分.详细步骤 1.新建Empty工程 2.添加资源文件 3.搭建注册界面 4.搭建登录界面 5.编写注册界面和登录界面的代码 6.设置APP初 ...
- android 打开其它app,Android 在一个APP里打开另一个APP
前言 不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢? 运行效果图 正文 为了测试这个功能,首先要创建两个项目, ...
- android 模拟点击第三方app,Android实现打开第三方app
前言 在android开发过程中,我们有时会涉及到在本应用中打开第三方应用的需求,那么这里我封装了一个工具类--AppHelper,用于实现获取本设备中app安装列表及在本应用中打开第三方应用的功能, ...
最新文章
- LSD-SLAM 编译过程(Ubuntu 14.04 + ROS Indigo
- zuul框架设计与实现
- context-param和init-param区别
- js中String的常用扩展
- outlook里面邮件不能显示图片
- linux mmap 内存映射
- logback高级特性使用-异步记录日志
- SQL Server各个版本功能比较
- nowcoder 牛牛的最大兴趣组 质因子 + 思维
- 知识图谱最新权威综述论文解读:开篇部分
- Neutron的Port详解
- FineReport学习-练习05-超级链接
- python中print输出变量_python中如何使用print函数?
- 01 ArcGIS空间分析--水文分析--利用水文分析方法提取山谷山脊线
- VMWare虚拟机 网络连接模式
- 【C++ Caffe】ubuntu下MNIST训练结果
- tm4c123gxl库函数调包侠养成(四)——————串口发送的基本配置
- java计算机毕业设计旅游信息网站源程序+mysql+系统+lw文档+远程调试
- 【财富空间】曾国藩:三分精明,七分厚道,做人最高境界
- 数据仓库专题(1)-数据仓库生命周期模型
热门文章
- 2017年双十一最全面的大数据分析报告在此!+2018年双十一已经开始,厚昌竞价托管教你如何应对流量流失?+2019年双十一大战一触即发:阿里、京东都有哪些套路和玩法
- VulnHub渗透测试实战靶场 - THE ETHER: EVILSCIENCE
- 抖音起号技巧实操课:可以直接上手的注册与养号的方法和技巧
- 按键控制led灯亮灭c语言实验报告,通过按键控制LED灯的实验
- Truthful Double Spectrum Auction (TDSA)
- 阿里巴巴高并发架构,到底如何对抗双十一亿级并发流量
- 从冯导撕逼和李安120帧电影说起,聊聊VR电影的发展
- 互联网商城盲盒app开发2021年为什么异常火爆?
- 如果卡通人物也玩抖音,你猜他们会经历什么?
- JS--图片轮播效果