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);
       }
   }

查询效果

Android跳转三方应用实例代码

获取手机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;
   }

兴趣分析

看图说话可以分析出,主要是通过PackageManagerCategory为条件,过滤出android.intent.category.LAUNCHER的 app

Android跳转三方应用实例代码

看看ResolveInfo

Android跳转三方应用实例代码

看看ActivityInfo(我没去找线上源码,本地也没下载… 所以看不全)

关于每个app的基本信息,一般都在ActivityInfo中,有兴趣的可以去源码文档看一下 ~

Android跳转三方应用实例代码

来源:https://blog.csdn.net/qq_20451879/article/details/122129220

标签:Android,跳转,应用
0
投稿

猜你喜欢

  • Java堆内存又溢出了!教你一招必杀技(推荐)

    2022-09-22 06:32:55
  • 详解SpringBoot中的统一功能处理的实现

    2022-07-06 12:14:49
  • c语言中十六进制转二进制显示的实现方法

    2023-12-17 23:21:44
  • 点九图片的显示内容区域应作何理解

    2022-12-27 12:24:30
  • Java多线程锁机制相关原理实例解析

    2023-05-25 12:33:37
  • Android Activity的启动过程源码解析

    2023-12-25 11:16:00
  • Java8-Stream流操作List去重问题

    2023-11-23 23:29:49
  • 详解SpringBoot 快速整合Mybatis(去XML化+注解进阶)

    2022-02-19 03:54:29
  • java获取时间的方法总结

    2022-03-28 15:36:38
  • java和javascript中过滤掉img形式的字符串不显示图片的方法

    2021-08-31 10:12:49
  • Java用三元运算符判断奇数和偶数的简单实现

    2023-07-24 16:54:03
  • Java启用Azure Linux虚拟机诊断设置

    2022-06-28 05:42:51
  • Hibernate实现悲观锁和乐观锁代码介绍

    2022-04-25 09:43:45
  • SpringBoot整合mybatis的方法详解

    2023-09-02 06:23:57
  • Android自定义流式布局的实现示例

    2022-10-14 23:30:44
  • Android使用CrashHandler来获取应用的crash信息的方法

    2023-07-25 20:27:38
  • Sentinel源码解析入口类和SlotChain构建过程详解

    2022-06-14 18:29:50
  • SpringBoot深入浅出分析初始化器

    2022-07-06 09:05:59
  • 使用idea+gradle编译spring5.x.x源码分析

    2022-05-13 15:13:31
  • C#根据反射和特性实现ORM映射实例分析

    2023-03-29 11:52:52
  • asp之家 软件编程 m.aspxhome.com