当前位置:   article > 正文

Android 查询及获取应用程序 Package 及 Acticity 名称的方法_android 查看当前应用的包名

android 查看当前应用的包名

一、通过命令查询和获取应用的Package及Acticity

(一)通过命令查询应用包名及安装信息

以下是常用命令:

命令形式作用
adb shell pm list packages查询系统中所有应用的包名
adb shell pm list packages -s查询系统应用包名
adb shell pm list packages -3查询第三方应用包名
adb shell pm list packages -f查询系统中所有应用的包名及与包相关联的文件信息
adb shell pm list packages -u

查询包和安装信息(安装来源)

组合查询,例如

adb shell pm list packages -s -f

(二)通过命令获取当前应用包名及活动名称

1、常用方法

Linux系统查询命令(Linux 系统采用 grep 命令查询文件中的字符串):

adb shell dumpsys window | grep mCurrentFocus

Windows系统查询命令(Windows 系统采用 findstr 命令查询文件中的字符串):

adb shell dumpsys window | findstr mCurrentFocus

2、其他方法

先使用 adb logcatadb logcat -s ActivityTaskManager 命令打印 log 信息,然后启动应用程序相应的活动,然后在 log 信息中找到含有 ActivityTaskManager 与启动 Activity 相关的信息,例如:

ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 pkg=com.android.gallery3d cmp=com.android.gallery3d/.app.GalleryActivity bnds=[652,2035][795,2140]} from uid 10067

最后通过上述 log 信息可知,包名为 com.android.gallery3d ,被启动的活动名为 GalleryActivity

二、通过代码查询和获取应用程序的Package及Acticity

注意:在 Android 11 (API 30)中引入了包可见性的概念,即在 Android 11 及以上版本中将不能直接获取或查询到系统已安装的全部应用包名,包括第三方应用。所以,直接调用 PackageManagergetInstalledApplications() getInstalledPackages() 等的方法后需要在清单文件中声明以下权限,否则只能获取或查询到部分已安装应用包名:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

(一)通过查询指定应用包名判断应用是否存在

  1. public boolean isTargetPackageName(Context context, String packageName){
  2. PackageManager packageManager = context.getPackageManager();
  3. try {
  4. packageManager.getApplicationInfo(packageName, 0);
  5. return true;
  6. } catch (PackageManager.NameNotFoundException e) {
  7. e.printStackTrace();
  8. }
  9. return false;
  10. }

(二)获取系统所有的应用包名

  1. public List<String> getAllApplicationPackages(Context context) {
  2. //1. 创建泛型为String类型的List类型对象packageList,用于缓存所有获取到的应用包名
  3. List<String> packageList = new ArrayList<String>();
  4. try{
  5. //2. 通过getPackageManager()获取PackageManager类型的对象manager
  6. PackageManager manager = context.getPackageManager();
  7. //3. 通过调用manager.getInstalledPackages()获取的泛型为PackageInfo类型的List类型对象packageInfoList
  8. List<PackageInfo> packageInfoList = manager.getInstalledPackages(0);
  9. //4. 创建PackageInfo类型的变量info,用于接收packageInfoList对象中存储的PackageInfo类型数据
  10. //,然后通过for循环遍历info
  11. for (PackageInfo info : packageInfoList) {
  12. //5.将从info中获取到的应用包名packageName缓存到packageList对象中
  13. packageList.add(info.packageName);
  14. Log.i("MainActivity", "----------packageName = " + info.packageName);
  15. }
  16. } catch (Exception e){
  17. e.printStackTrace();
  18. }
  19. return packageList;
  20. }

(三)判断通过 Intent 启动 Acticity 是否存在

  1. if (getPackageManager().resolveActivity(intent, 0) == null) {
  2. // 说明系统中不存在这个activity
  3. }
  4. if (intent.resolveActivity(getPackageManager()) == null) {
  5. // 说明系统中不存在这个activity
  6. }
  7. List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
  8. if (list.size() == 0) {
  9. // 说明系统中不存在这个activity
  10. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/736927
推荐阅读
相关标签
  

闽ICP备14008679号