前言

有时我们需要在自己的程序调起第三方程序,这个时候我们就需要知道第三方程序的包名和入口界面的Activity。
下面我们介绍几种方式获取第三方程序的包名及程序入口Activity。

1.使用adb指令获取

配置了adb指令环境后,手机打开调试模式连接电脑(虚拟机也行)直接在命令行中输入如下指令:

adb shell dumpsys activity activities 

命令行会输出当前运行的Activity的所有信息,我们只需要关注如下图标注的mFocusedActivity信息即可。
第一个圈是包名,第二个就是当前的Activity名。

2.PackageManager

ResolveInfo类的部分方法

  1. 获取图标:resolveInfo.activityInfo.loadIcon(packageManager)
  2. 获取包名:resolveInfo.activityInfo.packageName
  3. 获取程序入口activity:resolveInfo.activityInfo.name

代码

/*** Created by Derek on 2017/3/31 0031.* 根据应用程序的名称获取对应的信息** @param context* @param appLabel 程序的名称* @return*/public ResolveInfo findInstallAppDetails(Context context, String appLabel) {PackageManager packageManager = context.getPackageManager();//匹配程序的入口Intent intent = new Intent(Intent.ACTION_MAIN, null);intent.addCategory(Intent.CATEGORY_LAUNCHER);//查询List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0);for (int i = 0; i < resolveInfos.size(); i++) {String appName = resolveInfos.get(i).loadLabel(packageManager).toString();if (appLabel.equals(appName)) {return resolveInfos.get(i);}}return null;}

ActivityManager

核心代码

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);RunningTaskInfo info = manager.getRunningTasks(1).get(0);String shortClassName = info.topActivity.getShortClassName();    //类名String className = info.topActivity.getClassName();              //完整类名String packageName = info.topActivity.getPackageName();          //包名

因为ActivityManager获取的是topActivity的信息,所以为了获取第三方应用的包名,我们需要在Service中执行这段代码,然后打开第三方应用,在控制台输出第三方应用的信息。

为了及时获取最新的Activity,我们需要使用子线程不断刷新。

Service

public class SoftService extends Service {private ActivityManager activityManager = null;private Handler handler = new Handler();private String activityName = null;private Runnable runnable = new Runnable() {@Overridepublic void run() {List<ActivityManager.RunningTaskInfo> runningTaskInfo = activityManager.getRunningTasks(1);activityName = (runningTaskInfo.get(0).topActivity).toString();Log.i("ActivityManager: ", "当前activity是---->" + activityName);handler.postDelayed(runnable, 5000);//每5秒刷新一次}};@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {handler.post(runnable);//开启子线程return super.onStartCommand(intent, flags, startId);}@Overridepublic void onCreate() {super.onCreate();activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);}@Overridepublic IBinder onBind(Intent arg0) {return null;}@Overridepublic void onDestroy() {handler.removeCallbacks(runnable);}}

源码

https://github.com/Demo-DeMon/SoftManager

参考

https://blog.csdn.net/android_cmos/article/details/73382573

Android获取第三方程序的包名相关推荐

  1. java怎么获取手机权限,Android 获取手机全部应用包名以及权限

    Android 获取手机所有应用包名以及权限 package gongzibai.co.cc; import java.util.List; import android.app.Activity; ...

  2. Android获取本机浏览器包名,并调用指定浏览器打开网页

    昨天还在嘀咕着项目快做完了,接下来公司会安排什么事,结果今天就给了我一个新任务,其中要做的一个功能就是指定调用谷歌浏览器打开网页,如果没有该浏览器就提示客户进行下载,查找一番资料后,觉得这种东西还是要 ...

  3. Android 获取所有已安装应用程序的包名

    //因为我的手机是华为手机所以过滤掉了华为,大家可以按需求过滤 public void getAppProcessName(Context context) {//当前应用pidfinal Packa ...

  4. Android 在Android手机上获取其他应用的包名及版本号

    获取Android手机上其他应用的包名及版本号方法有很多,可以通过AAPT从APK包中直接获取,也可以通过代码在手机上获取.显然,对于产品或者用户来说要获取这些信息,在手机上获取更为简便. 下面我们来 ...

  5. Android 进程 缓存服务,Android获取应用程序大小和缓存的实例代码

    info package com.qin.appsize; import android.content.Intent; import android.graphics.drawable.Drawab ...

  6. android 启动第三方程序的代码(利用ComponentName)

    转自:http://blog.csdn.net/vrix/article/details/6851557  在Intent中可以直接使用Intent.setClass() 也可以使用组件Compone ...

  7. Android NFC标签写入应用包名,感应到标签自动打开应用

    首先在AndroidManifest.xml文件中添加如下配置 <!-- SDK版本至少为14 --> <uses-sdk android:minSdkVersion="1 ...

  8. Android部分应用市场和包名

    开发过程中,可能会遇到 "软件评分评价" ."调用系统工具"."跳转第三方应用" 等等的需求,要实现这些调用跳转需要相对应的应用包名才可以. ...

  9. 获取wxapkg文件_微信小程序编译包的获取与解压——在手机中获取小程序编译包wxapkg...

    准备工作: 微信关注需要下载编译包的小程序,然后点进去看一下,微信就会自动下载相应的编译包到手机上了. 获取小程序编译包: 据说root手机可以直接在手机的文件管理中查找wxapkg文件,自己尝试了下 ...

最新文章

  1. Java关键字和保留字
  2. Linux压缩与解压缩文件
  3. 手机下载Python_手机也能编程?盘点这6个可以用手机编程的App!快收藏
  4. CentOS6.5+puppet3.7.3 安装、配置及测试
  5. SpringMVC如何获取请求带来的各种信息 ||如果我们的请求参数是一个POJO(自定义参数类型), SpringMVC会自动的为这个POJO进行赋值
  6. 两根硬铜线并线接插座_高级电工原来都这样接电线,手法还没见过,我也立马学...
  7. el-drawer点击的时候为什么有边框_别再纠结背景墙边框的材料,这4种线条边框便宜又实用,简洁大方...
  8. liferay开发文档_Liferay –简单主题开发
  9. filestream streamreader
  10. 网易云音乐APP分析
  11. native工具备份mysql数据库_Navicat Premium实现mysql数据库备份/还原
  12. 华中科技大学计算机启明班,华中科技大学启明学院创新实验班管理办法
  13. hbuilder版本更新失败_Hbuilder X升级后报错误:plus.device.getInfo is not a function
  14. 数据库驱动程序是什么?
  15. React高级(五)
  16. 如何给图片加水印?分享怎么给图片加水印的方法
  17. 2022CPA财务与成本管理-管理会计专题【完结】
  18. python居然还能画出这么精美的魔法少女,惊我一整年
  19. 简单易懂的关键词挖掘方法
  20. Excel用函数把时间戳格式和日期格式相互转换

热门文章

  1. vue组件获取props_Vue组件选项props
  2. Python基础-元组字典集合
  3. 《Pocket Universe》严肃游戏介绍
  4. 使用urllib.request.quote进行URL解码
  5. 【文明6黑屏,修改分辨率成功解决】
  6. 魔兽RPG地图的二十二条军规
  7. 2021大厂最新面试总结!
  8. Vue 基础第二次再次回顾
  9. 《婚姻鞋》——毕淑敏
  10. 基于Socket实现的赛事记分板