Android跳转三方应用实例代码
作者:Modu_Liu 发布时间:2022-02-01 11:15:42
前言
老了,老了,那天有位小同事问我Android跳转三方应用时有什么要注意的?是否可以直接跳?如何传递参数过去? 嗯… 我竟然说需要root或者三方授权,尴尬了…
Android四大组件都支持IPC通信,而Activity IPC通信主要体现在通过Intent启动各种系统功能,应用等;其实在此之前已经有很多优秀的blog进行了总结,不过各有不同,我仅以我的方式记录一下 …
如何跳转三方应用?跳转三方应用跳转三方应用 + 指定页面(Activity) 如何获取手机上已有的app包名与启动页(Activity)?获取手机中安装的app包名、启动Activity获取手机app列表兴趣分析 如何在项目中进行实战演练?
如何跳转三方应用?
这里指的三方应用可以理解为自身外的其余app,例如QQ、微信、支付宝、淘宝等app ~
主要通过 Activity Intent + PackageManager
启动三方App,主要在于getLaunchIntentForPackage方法
,如果理解通过Launch启动App的话,秒懂 ~
跳转三方应用
核心代码
PackageManager packageManager = this.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage("项目包名");
startActivity(intent);
封装方法
/**
* @param context 上下文
* @param packageName 包名
*/
public void skipOtherApp(Context context, String packageName) {
PackageManager packageManager = context.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
startActivity(intent);
}
跳转三方应用 + 指定页面(Activity)
跳转三方应用的具体界面与上方方式稍有不同,主要通过ComponentName类来帮助打开另一个应用的Activity或者Service
等,具体通过Intent.setComponent方法实现。
核心代码
Intent intent = new Intent();
//这里跳转的是淘宝的启动页
ComponentName comp = new ComponentName("com.taobao.taobao", "com.taobao.tao.welcome.Welcome");
intent.setComponent(comp);
//为三方的activity新开任务栈
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
方法封装
/**
* @param packageName 包名
* @param activityClass 跳转界面的activity
*/
public void skipOtherAppActivity(String packageName, String activityClass) {
Intent intent = new Intent();
//ComponentName类主要是用来帮助打开另一个应用的Activity或者Service等,通过Intent.setComponent方法实现
ComponentName comp = new ComponentName(packageName, activityClass);
intent.setComponent(comp);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
如何获取手机上已有的app包名与启动页(Activity)?
获取手机中安装的app包名、启动Activity
/**
* 通过PackageManager获取手机内所有app的包名和启动页(首个启动Activity的类名)
* 可根据自己业务需求封装方法的返回体,可以是单app信息,也可以是appList
*/
public void getAllApp(Context context) {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> appsInfo = packageManager.queryIntentActivities(intent, 0);
Collections.sort(appsInfo, new ResolveInfo.DisplayNameComparator(packageManager));
for (ResolveInfo info : appsInfo) {
String pkg = info.activityInfo.packageName;
String cls = info.activityInfo.name;
Log.e("app_info", "pkg:" + pkg + " —— cls:" + cls);
}
}
查询效果
获取手机app列表
方法封装(或许有点画蛇添足了,就当做下次copy元素吧)
/**
* 获取手机app列表
*/
public List<ResolveInfo> getAllAppList(Context context) {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> appsInfo = packageManager.queryIntentActivities(intent, 0);
Collections.sort(appsInfo, new ResolveInfo.DisplayNameComparator(packageManager));
return appsInfo;
}
兴趣分析
看图说话可以分析出,主要是通过PackageManager
以Category
为条件,过滤出android.intent.category.LAUNCHER
的 app
看看ResolveInfo
看看ActivityInfo(我没去找线上源码,本地也没下载… 所以看不全)
关于每个app的基本信息,一般都在ActivityInfo中,有兴趣的可以去源码文档看一下 ~
来源:https://blog.csdn.net/qq_20451879/article/details/122129220
猜你喜欢
- Thread生命周期生命周期概述Java的线程状态描述放在Thread类里面的枚举类State中.总共包含了6中状态(从出生到死亡)。pub
- 1.准备工作1、JDK安装2、Maven安装3、Git安装4、jenkins安装以上软件安装成功后进入jenkins进行相关配置。如果需要通
- 说明:本文记录如何在Idea下,利用Maven管理项目,并整合SSM(Spring + Spring MVC +Mybatis)框架,实现简
- 在项目开发中,我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的情况,下面小编给大家演示一下这种情况下的如何解决字段名与
- 最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成xml文件. 假如有如下一个类 class Arwen { priva
- Java 判断字符串中是否包含中文的实例详解 Java判断一个字符串是否有中文是利用Unicode编码来判断,因为中
- 什么是jdkjdk是什么呢?jdk的是java development kit的缩写,意思是java程序开发的工具包。也可以说jdk是jav
- 前言本文主要给大家介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。读Hex写CS
- MS的CMD命令行是一种重要的操作界面,一些在C#中不那么方便完成的功能,在CMD中几个简单的命令或许就可以轻松搞定,如果能在C#中能完成C
- 前言:有时候我们在用Spring Aop面向切面编程,需要获取连接点(JoinPoint)方法参数名、参数值。环境:Mac OSXIntel
- 实现原理在之前的文章中,我们介绍了普通的帐号密码登录的方式: SpringBoot + Spring Security 基本使用及个性化登录
- 圆形识别方案识别流程判断是否为封闭图形;根据圆的方程,取输入点集中的1/6、3/6、5/6处的三个点,求得圆的方程,获取圆心及半径;取点集中
- C#利用缓存分块读写大文件,供大家参考,具体内容如下在日常生活中,可能会遇到大文件的读取,不论是什么格式,按照储存文件的格式读取大文件,就会
- 前言在引入 fl_chart 绘制图表的时候,看到插件有下面这样的动效,随机散乱的圆点最后组合成了 Flutter 的 Logo,挺酷炫的。
- 前言接着我上一章:Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下上一章我把项目做了一部分工程化包装,主要还是想要
- mybatis自动生成实体类、mapper文件、mapper.xml文件若采用mybatis框架,数据库新建表,手动编写的话,需要编写大量的
- 1、导包基于maven<dependency> <groupId>com.fasterxml.jacks
- 有时候,我们需要把对象A的所有值复制给对象B(B = A),但是这样用等号给赋值你会发现,当B中的某个对象值改变时,同时也会修改到A中相应对
- Eclipse的应用需要众多的插件,但是Eclipse的插件大家又知道多少呢?“Eclipse最牛的30个插件”不知道看官们是否了解,51C
- 项目中经常遇到分数统计的需求,例如我们执行了某项操作或做了某个题目,操作正确则计分,相反则不计分失去该项分数,为了应对需求需要一个分数统计系