Android 查询及获取应用程序 Package 及 Acticity 名称的方法

一、通过命令查询和获取应用的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"/>

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

   
 public boolean isTargetPackageName(Context context, String packageName){
        PackageManager packageManager = context.getPackageManager();
        try {
            packageManager.getApplicationInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return false;
    }

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

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

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

 if (getPackageManager().resolveActivity(intent, 0) == null) {  
 
       // 说明系统中不存在这个activity
  }
 
 if (intent.resolveActivity(getPackageManager()) == null) {  
 
       // 说明系统中不存在这个activity
  }
 
  List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
  if (list.size() == 0) {   
       // 说明系统中不存在这个activity
  }

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要监听 Android 中 Activity 的启动方法,可以使用 ActivityLifecycleCallbacks 接口。这个接口可以在应用程序中注册一个 Activity 生命周期的回调,当应用程序中的 Activity 发生生命周期事件时,就会回调该接口的方法。 具体实现步骤如下: 1. 创建一个实现了 ActivityLifecycleCallbacks 接口的类,重写其中的方法。 ```java public class MyActivityLifecycleCallbacks implements ActivityLifecycleCallbacks { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { // Activity 创建时回调 } @Override public void onActivityStarted(Activity activity) { // Activity 启动时回调 } @Override public void onActivityResumed(Activity activity) { // Activity 恢复时回调 } @Override public void onActivityPaused(Activity activity) { // Activity 暂停时回调 } @Override public void onActivityStopped(Activity activity) { // Activity 停止时回调 } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { // Activity 保存状态时回调 } @Override public void onActivityDestroyed(Activity activity) { // Activity 销毁时回调 } } ``` 2. 在应用程序中注册该回调。 ```java Application application = getApplication(); MyActivityLifecycleCallbacks callbacks = new MyActivityLifecycleCallbacks(); application.registerActivityLifecycleCallbacks(callbacks); ``` 这样,在应用程序中每次有 Activity 发生生命周期事件时,就会回调相应的方法,我们可以在这些方法中做出相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值