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”
原文:https://www.cnblogs.com/loaderman/p/12156274.html
android 打开其它app,Android APP打开另一个APP的几种实现总结相关推荐
- android多App间多界面交互,一个APP如何适配多个Android终端?
简介: 传统的多终端适配方案,是为大尺寸Pad开发一个特定的HD版本.但是目前支持Android系统的设备类型越来越丰富,不同类型的设备尺寸也越来越多样化,特定的HD版本并不能适配所有设备尺寸.App ...
- app开发周期需要多久 开发一个app要多长时间
在移动互联网时代,手机成为主要的工具,各式各样的App快速改变着大家的生活,手机App开发自然成了市场热门需求.但是App开发技术门槛比较高,很多人并不了解细节.开发制作一款专业的手机App大概需要多 ...
- 「app开发价格」开发一个app到底需要多少钱
1.一种是使用现成的模板进行修改:使用模板工作量较小,如果是一款功能简单,客户要求不太高的APP,只需要让美工对前台的页面进行一定程度的修改,最短一两天就能完成,费用最低2000元至3000元. 2. ...
- 实战APP微信支付服务商模式(一个APP多个商户收款)
由于项目需要对接微信支付功能,需求是:一个APP实现不同商户进行收款,花时间去研究了下官方文档,决定采用微信支付APP服务商模式进行实现,开发时也踩了不少坑(参数顺序及大小写.签名的加密方式等),这里 ...
- iOS 从一个APP跳转到另一个APP,并带参数跳到指定页面
功能实现:A跳到B并打开B中指定页面 步骤: 1.首先创建两个项目(项目A,项目B),在项目B中的info.plist文件中添加URL Types,如下图所示:其中URL idenifier是项目B的 ...
- android启动程序唤起其它app,安卓和rn唤起其他app应用
对于app来说,很多时候都需要在本app中唤起其他app应用,本文简单的列举了安卓和react-native对于唤起其他app的一些做法. 安卓 1)url scheme唤起 使用场景: h5页面跳转 ...
- Android项目实战(二十二):启动另一个APP or 重启本APP
Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...
- android手机打开java文件_Android Studio打开手机权限
java.io.FileNotFoundException: /storage/emulated/0/xxx.mp3: open failed: EACCES (Permission denied) ...
- 开发一个APP多少钱?
开发一个APP多少钱? 开发一个APP要多少钱?相信不光是客户有这个疑问,就算是一般的程序员也想知道答案.很多程序员想在业余时间接外包挣外快,但是他们常常不知道该如何定价,如何有说服力的要价.这是因为 ...
- 为什么有必要开发一个APP?
在这个大数据的时代,APP占据了很重要的地位,APP被广泛应用到各行各业,许多传统的企业看透了互联网的商机,纷纷着手开发属于自己独立的APP客户端.为何APP开发如此火热?有必要开发一个APP吗? 关 ...
最新文章
- python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名
- 【Android】Camera 使用浅析
- 我的 atom 开发工具
- SQLServer之函数简介 1
- Spring事务操作-事务引入
- python 连续等于
- POST 方式上传图片
- ALTOVA XMLSPY使用,建xml文件,构建xpath和XQuery查询,xml和json格式转换
- java裁剪缩放图片代码下载
- QQ信任登陆注册开发者帐号
- DhtmlxGrid第一次接触,jsp页面
- 数据结构-学习笔记整理
- 机器学习——不可逆矩阵处理
- python开发PC端桌面应用
- 手机怎么解决同ip多账号_游戏工作室如何实现手游多开多窗口多IP
- 易语言超人气教程第一课(放弃语言之争)
- HTML5+JS游戏开发模块----canvas打字游戏
- 加州大学圣地亚哥分校计算机科学排名,加州大学圣地亚哥分校计算机科学硕士排名第18(2020年TFE Times排名)...
- 解决No such file or directory: /turtlebot3/turtlebot3_description/urdf/turtlebot3_.urdf.xacro
- 全网最详细SUMO仿真软件教程——入门篇
热门文章
- openwrt挂载U盘或SD卡作为根文件系统
- risc芯片 服务器,聚焦RISC架构 浅析IBM Power处理器历程
- 玻尔兹曼熵方程:一段从克劳修斯到普朗克的历史
- 必收藏!计算机保研时间轴!
- 雷锋网专访爱库网创始人徐建海
- 用Unity同时开发【微信小游戏】【安卓】【IOS】游戏#1.3 转换成微信小游戏
- 远程连接工具radmin2.2
- PL/SQL之块结构和组成元素
- 六安市高考成绩查询入口2021,六安高考成绩查询入口
- [机缘参悟-60]:《兵者,诡道也》-1-开篇:“死“与“生“都是天道