获取手机所有安装APP的信息

本文介绍了一种方法来获取Android设备上所有已安装应用程序的信息,包括应用名称、图标、包名、路径、大小、版本号及首次安装时间,并提供了一个按名称排序的应用列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public List<AppInfo> getAppInfo() {
    // 获得PackageManager对象
    mPm = this.getPackageManager();
    List<PackageInfo> packageInfoList = mPm.getInstalledPackages(0);
    // 根据name排序
    Collections.sort(packageInfoList, new Comparator<PackageInfo>() {
        @Override
        public int compare(PackageInfo p1, PackageInfo p2) {
            String name1 = (String) mPm.getApplicationLabel(p1.applicationInfo);
            String name2 = (String) mPm.getApplicationLabel(p2.applicationInfo);
            return name1.compareTo(name2);
        }
    });
    mInfoList = new ArrayList<>();
    for(PackageInfo info :packageInfoList){
        AppInfo appInfo = new AppInfo();
        //应用名称
        String appName = (String) mPm.getApplicationLabel(info.applicationInfo);
        //图标
        Drawable icon = info.applicationInfo.loadIcon(mPm);
        //包名
        String packageName = info.applicationInfo.packageName;
        //路径
        String path = info.applicationInfo.sourceDir;
        //大小
        File file=new File(path);
        String size = formatFileSize(file.length());
        //版本
        String versionName = info.versionName;
        //第一次安装时间
        long firstInstallTime = info.firstInstallTime;
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 =new Date(firstInstallTime);
        String firstTime=format.format(d1);
        appInfo.setPkgName(packageName);
        appInfo.setAppIcon(icon);
        appInfo.setVersionName(versionName);
        appInfo.setAppName(appName);
        appInfo.setPkgPath(path);
        appInfo.setCodeSize(size);
        appInfo.setAppDate(firstTime);
        mInfoList.add(appInfo);
    }
    return mInfoList;
}

/**
 * 格式化
 * @param length
 * @return
 */
public static String formatFileSize(long length) {
    String result = null;
    int sub_string = 0;
    // 如果文件长度大于1GB
    if (length >= 1073741824) {
        sub_string = String.valueOf((float) length / 1073741824).indexOf(
                ".");
        result = ((float) length / 1073741824 + "000").substring(0,
                sub_string + 3) + "GB";
    } else if (length >= 1048576) {
        // 如果文件长度大于1MB且小于1GB,substring(int beginIndex, int endIndex)
        sub_string = String.valueOf((float) length / 1048576).indexOf(".");
        result = ((float) length / 1048576 + "000").substring(0,
                sub_string + 3) + "MB";
    } else if (length >= 1024) {
        // 如果文件长度大于1KB且小于1MB
        sub_string = String.valueOf((float) length / 1024).indexOf(".");
        result = ((float) length / 1024 + "000").substring(0,
                sub_string + 3) + "KB";
    } else if (length < 1024)
        result = Long.toString(length) + "B";
    return result;
}

/**
 * 根据包名启动APP
 * @param packagename 包名
 */
private void doStartApplicationWithPackageName(String packagename) {
    // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
    Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
    resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    resolveIntent.setPackage(packagename);
    // 通过getPackageManager()queryIntentActivities方法遍历
    List<ResolveInfo> resolveinfoList = getPackageManager()
            .queryIntentActivities(resolveIntent, 0);
    if(resolveinfoList.size() == 0){
        return;
    }
    ResolveInfo resolveinfo = resolveinfoList.iterator().next();
    if (resolveinfo != null) {
        String packageName = resolveinfo.activityInfo.packageName;
        //App启动的Activity
        String className = resolveinfo.activityInfo.name;
        // LAUNCHER Intent
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        // 设置ComponentName参数1:packagename参数2:启动的Activity
        ComponentName cn = new ComponentName(packageName, className);
        intent.setComponent(cn);
        startActivity(intent);
    }
}
<think>嗯,用户现在想列出手机安装app信息。我需要先理解他的需求是什么。他可能想了解如何获取手机上所有已安装应用信息,可能是为了管理应用、备份或者分析。 首先,我应该考虑不同的操作系统,主要是Android和iOS,因为这两个是主流。用户可能不知道不同系统的方法不同,所以需要分别介绍。 对于Android部分,用户可能需要使用adb命令,这是开发者常用的工具。需要详细说明步骤,比如启用USB调试,然后运行相应的adb命令。另外,普通用户可能没有开发背景,所以可能需要更简单的方法,比如使用第三方应用,如App Inspector或者APK Extractor。这些工具可能更友好,但需要提醒用户注意权限和安全问题。 iOS方面,由于系统限制更多,普通用户可能无法直接获取所有应用信息,尤其是系统应用。需要提到使用iTunes或者第三方工具,如iMazing,但可能涉及越狱,这会有风险,需要提醒用户谨慎操作。 另外,用户可能有技术背景,想通过编程获取信息,比如在Android上用Java/Kotlin,iOS上用Swift。这部分需要给出代码示例,但也要注意权限问题,比如Android需要QUERY_ALL_PACKAGES权限,而iOS的权限限制更严格。 还需要考虑用户的实际使用场景,比如是否用于开发、数据分析,或者个人使用。如果是开发,可能需要更详细的信息,如包名、版本号;如果是普通用户,可能只需要应用名称和版本。 用户可能没有提到的深层需求,比如导出应用列表备份,或者监控安装应用。可能需要给出一些扩展建议,比如使用脚本自动化,或者推荐备份工具。 最后,注意事项很重要,比如权限问题、系统限制和安全风险,特别是第三方工具可能需要的敏感权限,需要提醒用户谨慎选择可信工具。</think>--- ### **获取手机安装App信息的核心方法** 根据操作系统(Android/iOS)和权限级别不同,获取方式有所差异。以下是详细方案: --- #### **一、Android系统** **1. 通过ADB命令(无需Root)** - **适用场景**:开发者调试或连接电脑操作。 - **步骤**: 1. 启用手机的**USB调试模式**(设置 → 开发者选项 → USB调试)。 2. 电脑安装[Android SDK Platform Tools](https://developer.android.com/studio/releases/platform-tools),打开终端执行: ```bash adb shell pm list packages -f # 列出所有应用包名及APK路径 adb shell dumpsys package <包名> # 获取指定App的详细信息(版本、权限等) ``` - **输出示例**: ```plaintext package:/data/app/com.example.app-1/base.apk=com.example.app versionName=1.0.0 permissions:android.permission.CAMERA ``` **2. 使用第三方工具(非Root)** - **推荐工具**: - [App Inspector](https://play.google.com/store/apps/details?id=cmb.pbg.appinspector):直接显示所有App的包名、版本、安装时间。 - [APK Extractor](https://play.google.com/store/apps/details?id=com.ext.ui):导出APK文件并解析元数据。 **3. 编程获取(需App权限)** - **代码示例(Kotlin)**: ```kotlin val pm = context.packageManager val apps = pm.getInstalledApplications(PackageManager.GET_META_DATA) apps.forEach { app -> Log.d("APP_INFO", "包名: ${app.packageName}, 版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值