普通用户
根据应用名称查找包名 [复制链接]
喻志明 发表于 2025-05-11 120 1

JAVA代码如下:

package com.simple.component;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import java.util.ArrayList;
import java.util.List;

/**
 * Android应用包名查找工具
 * 提供静态方法根据应用名称查找对应的包名
 */
public class 应用名称查找包名 {

    /**
     * 根据应用名称精确查找包名(忽略大小写)
     * @param 上下文 应用上下文
     * @param 应用名称 应用名称(如:微信)
     * @return 匹配的包名数组(可能为空数组)
     */
    public static String[] 根据精确名称查找包名(Context 上下文, String 应用名称) {
        if (上下文 == null) {
            throw new IllegalArgumentException("上下文不能为null");
        }
        
        PackageManager 包管理器 = 上下文.getPackageManager();
        List<String> 包名列表 = new ArrayList<>();
        List<ApplicationInfo> 已安装应用列表 = 包管理器.getInstalledApplications(0);

        for (ApplicationInfo 应用信息 : 已安装应用列表) {
            String 显示名称 = 包管理器.getApplicationLabel(应用信息).toString();
            if (显示名称.equalsIgnoreCase(应用名称)) {
                包名列表.add(应用信息.packageName);
            }
        }

        return 包名列表.toArray(new String[0]);
    }

    /**
     * 根据应用名称模糊查找包名(忽略大小写)
     * @param 上下文 应用上下文
     * @param 关键字 搜索关键字(如:浏览器)
     * @return 匹配的包名数组(可能为空数组)
     */
    public static String[] 根据关键字查找包名(Context 上下文, String 关键字) {
        if (上下文 == null) {
            throw new IllegalArgumentException("上下文不能为null");
        }
        
        PackageManager 包管理器 = 上下文.getPackageManager();
        List<String> 包名列表 = new ArrayList<>();
        List<ApplicationInfo> 已安装应用列表 = 包管理器.getInstalledApplications(0);

        for (ApplicationInfo 应用信息 : 已安装应用列表) {
            String 应用标签 = 包管理器.getApplicationLabel(应用信息).toString();
            if (应用标签.toLowerCase().contains(关键字.toLowerCase())) {
                包名列表.add(应用信息.packageName);
            }
        }

        return 包名列表.toArray(new String[0]);
    }
}


XML如下:


	<category name="不可视组件" comment="不可视类组件;该类组件通常用于处理非UI界面的数据;例如时钟、文件选择器、蓝牙等组件。">
        <component name="时钟" comment="时钟;可用于循环处理指定业务代码;例如在APP中需要间隔指定时间调用某个函数、则可以使用该组件。">
            <property name="时钟周期" type="整数型" comment="设置或获取当前时钟的时钟周期;单位为毫秒。" />
            <property name="可用" type="逻辑型" comment="设置或获取当前时钟是否可用。" />
            <method name="置周期事件回调" args="(回调对象 为 周期事件回调)" return="" comment="设置时钟的周期事件回调对象。" />
            <interface name="周期事件回调" comment="监听当前时钟周期事件的回调。">
                <event name="周期事件" args="(源对象 为 时钟)" comment="当周期事件被调用时触发该事件。" />
            </interface>
        </component>
		<component name="应用名称查找包名" comment="用于根据应用名称查找对应的包名">
            <method name="根据精确名称查找包名" args="(上下文 Context,应用名称 为 文本型)" return="文本型[] " comment="根据应用名称精确查找包名,返回文本型数组" />
            <method name="根据关键字查找包名" args="(上下文 Context,应用名称 为 文本型)" return="文本型[] " comment="根据应用名称模糊查找包名(忽略大小写),返回文本型数组。" />            
        </component>

AI给的  错了别问我!我也不会[[笑cry]]

这是写成类库的方式,要在你安装的vcn的文件地址 的类库文件与xml文件下修改.我用的VcnStudio.Community版 安在了F:\上.

F:\VcnStudio.Community\sdk\android\components\primary\class 内建个 "应用名称查找包名.java"文件  内容就是上面的java代码

F:\VcnStudio.Community\sdk\android 内 打开 "sdk.xml" 文件 我是在 时钟下 加上 上面的5行文本

后面有时间会加上别的方法,或你加上别的方法也记得分.........


喻志明 2025-05-11

加了三个方法 :


package com.simple.component;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Android应用包名查找工具
 * 提供静态方法根据应用名称查找对应的包名
 */
public class 应用名称查找包名 {

   /**
     * 根据应用名称精确查找包名(忽略大小写)
     * @param 上下文 应用上下文
     * @param 应用名称 应用名称(如:微信)
     * @return 匹配的包名(若找到多个则返回第一个,未找到则返回null)
     */
    public static String 根据精确名称查找包名(Context 上下文, String 应用名称) {
        if (上下文 == null) {
            throw new IllegalArgumentException("上下文不能为null");
        }
        
        PackageManager 包管理器 = 上下文.getPackageManager();
        List<ApplicationInfo> 已安装应用列表 = 包管理器.getInstalledApplications(0);

        for (ApplicationInfo 应用信息 : 已安装应用列表) {
            String 显示名称 = 包管理器.getApplicationLabel(应用信息).toString();
            if (显示名称.equalsIgnoreCase(应用名称)) {
                return 应用信息.packageName; // 找到第一个匹配项后立即返回
            }
        }

        return null; // 未找到匹配项
    }

    /**
     * 根据应用名称模糊查找包名(忽略大小写)
     * @param 上下文 应用上下文
     * @param 关键字 搜索关键字(如:浏览器)
     * @return 匹配的包名数组(可能为空数组)
     */
    public static String[] 根据关键字查找包名(Context 上下文, String 关键字) {
        if (上下文 == null) {
            throw new IllegalArgumentException("上下文不能为null");
        }
        
        PackageManager 包管理器 = 上下文.getPackageManager();
        List<String> 包名列表 = new ArrayList<>();
        List<ApplicationInfo> 已安装应用列表 = 包管理器.getInstalledApplications(0);

        for (ApplicationInfo 应用信息 : 已安装应用列表) {
            String 应用标签 = 包管理器.getApplicationLabel(应用信息).toString();
            if (应用标签.toLowerCase().contains(关键字.toLowerCase())) {
                包名列表.add(应用信息.packageName);
            }
        }

        return 包名列表.toArray(new String[0]);
    }
    
    
     /**
     * 获取所有已安装应用的名称
     * @param 上下文 应用上下文
     * @return 所有应用名称的数组(按字母顺序排序)
     */
    public static String[] 取所有的应用名(Context 上下文) {
        if (上下文 == null) {
            throw new IllegalArgumentException("上下文不能为null");
        }
        
        PackageManager 包管理器 = 上下文.getPackageManager();
        List<ApplicationInfo> 已安装应用列表 = 包管理器.getInstalledApplications(0);
        List<String> 应用名称列表 = new ArrayList<>();

        for (ApplicationInfo 应用信息 : 已安装应用列表) {
            String 应用名称 = 包管理器.getApplicationLabel(应用信息).toString();
            应用名称列表.add(应用名称);
        }

        Collections.sort(应用名称列表);
        return 应用名称列表.toArray(new String[0]);
    }

    /**
     * 获取用户安装的应用名(非系统应用)
     * @param 上下文 应用上下文
     * @return 用户安装的应用名称的数组(按字母顺序排序)
     */
    public static String[] 取用户安装的应用名(Context 上下文) {
        if (上下文 == null) {
            throw new IllegalArgumentException("上下文不能为null");
        }
        
        PackageManager 包管理器 = 上下文.getPackageManager();
        List<ApplicationInfo> 已安装应用列表 = 包管理器.getInstalledApplications(0);
        List<String> 应用名称列表 = new ArrayList<>();

        for (ApplicationInfo 应用信息 : 已安装应用列表) {
            // 过滤掉系统应用
            if ((应用信息.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
                String 应用名称 = 包管理器.getApplicationLabel(应用信息).toString();
                应用名称列表.add(应用名称);
            }
        }

        Collections.sort(应用名称列表);
        return 应用名称列表.toArray(new String[0]);
    }

    /**
     * 获取系统应用名
     * @param 上下文 应用上下文
     * @return 系统应用名称的数组(按字母顺序排序)
     */
    public static String[] 取系统应用名(Context 上下文) {
        if (上下文 == null) {
            throw new IllegalArgumentException("上下文不能为null");
        }
        
        PackageManager 包管理器 = 上下文.getPackageManager();
        List<ApplicationInfo> 已安装应用列表 = 包管理器.getInstalledApplications(0);
        List<String> 应用名称列表 = new ArrayList<>();

        for (ApplicationInfo 应用信息 : 已安装应用列表) {
            // 仅保留系统应用
            if ((应用信息.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                String 应用名称 = 包管理器.getApplicationLabel(应用信息).toString();
                应用名称列表.add(应用名称);
            }
        }

        Collections.sort(应用名称列表);
        return 应用名称列表.toArray(new String[0]);
    }
}

xml:


		<component name="应用名称查找包名" comment="用于根据应用名称查找对应的包名">
            <method name="根据精确名称查找包名" args="(上下文 Context,应用名称 为 文本型)" return="文本型 " comment="根据应用名称精确查找包名,返回文本型" />
            <method name="根据关键字查找包名" args="(上下文 Context,应用名称 为 文本型)" return="文本型[] " comment="根据应用名称模糊查找包名(忽略大小写),返回文本型数组。" />            
			<method name="取所有的应用名" args="(上下文 Context)" return="文本型[] " comment="获取所有已安装应用的名称,返回所有应用名称的数组(按字母顺序排序)"/>
			<method name="取用户安装的应用名" args="(上下文 Context)" return="文本型[] " comment="获取用户安装的应用名(非系统应用),返回用户安装的应用名称的数组(按字母顺序排序)" />    
			<method name="取系统应用名" args="(上下文 Context)" return="文本型[] " comment="获取系统应用名,返回系统应用名称的数组(按字母顺序排序).有的系统应用是打不开的!" />           
        </component>



回复
 作者信息
喻志明
普通用户 云验证
专业开发指导服务

响应时间:5分钟

服务方式:官方1对1服务

工作时间:工作日 9:00 - 18:30

专业团队 · 开发指导 · 极速响应


官网 | 基础视频教程 | 在线文档 下载 VcnStudio IDE

© VcnStudio Inc All Rights Reserved

蜀ICP备17024229号