You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用QPython获取Android所有已安装应用包名并实现全应用启动?

在QPython中获取Android所有已安装应用包名并启动应用

我之前也碰到过这个问题——用getLaunchableApplications()确实只能抓取到那些有桌面快捷方式的应用,要获取所有已安装应用的包名,得直接调用Android的PackageManager API才行。下面是具体的实现步骤和代码:

1. 获取所有已安装应用的包名(含应用名称)

QPython的androidhelper模块已经封装了Android系统的API,我们可以直接用它来获取PackageManager,进而拿到所有已安装应用的信息:

from androidhelper import Android

# 初始化Android对象
droid = Android()
# 获取PackageManager实例
pm = droid.getPackageManager()

# 获取所有已安装应用的PackageInfo列表(参数0表示获取完整包信息)
package_list = pm.getInstalledPackages(0).result

# 遍历并输出应用名称和包名
print("所有已安装应用:")
for pkg_info in package_list:
    # 获取应用显示名称
    app_name = pm.getApplicationLabel(pkg_info.applicationInfo).result
    # 获取应用包名
    package_name = pkg_info.packageName
    print(f"应用名称: {app_name} | 包名: {package_name}")

这段代码会输出设备上所有已安装的应用,包括系统应用和用户自行安装的应用,完美解决了getLaunchableApplications()只能拿到部分应用的问题。

2. 通过包名启动任意应用

要启动应用,我们可以用PackageManager的getLaunchIntentForPackage()方法获取对应包名的启动Intent,再通过startActivityIntent()启动。这个方法能处理绝大多数有可启动界面的应用,包括系统应用:

def launch_app(package_name):
    try:
        # 获取应用的启动Intent
        launch_intent = pm.getLaunchIntentForPackage(package_name).result
        if launch_intent:
            # 启动应用
            droid.startActivityIntent(launch_intent)
            print(f"✅ 成功启动应用:{package_name}")
        else:
            print(f"❌ 应用 {package_name} 没有可直接启动的界面(可能是后台服务类应用)")
    except Exception as e:
        print(f"❌ 启动失败:{str(e)}")

# 调用示例:启动微信
launch_app("com.tencent.mm")

注意事项:

  • 有些系统应用(比如某些系统服务)没有可交互的启动界面,这时候getLaunchIntentForPackage()会返回None,启动会失败,属于正常情况。
  • 如果需要更灵活的启动方式(比如启动应用内的某个特定Activity),可以手动构造Intent,指定Action和ComponentName,但需要知道目标Activity的完整类名。

完整整合脚本

下面是一个把“获取应用列表”和“启动应用”整合在一起的完整脚本,方便你直接使用:

from androidhelper import Android

droid = Android()
pm = droid.getPackageManager()

def get_all_installed_apps():
    """获取所有已安装应用的名称和包名"""
    package_list = pm.getInstalledPackages(0).result
    apps = []
    for pkg_info in package_list:
        app_name = pm.getApplicationLabel(pkg_info.applicationInfo).result
        package_name = pkg_info.packageName
        apps.append({"name": app_name, "package": package_name})
    return apps

def launch_app(package_name):
    """通过包名启动应用"""
    try:
        launch_intent = pm.getLaunchIntentForPackage(package_name).result
        if launch_intent:
            droid.startActivityIntent(launch_intent)
            return True, f"已启动应用:{package_name}"
        else:
            return False, f"该应用没有可启动的界面"
    except Exception as e:
        return False, f"启动失败:{str(e)}"

# 打印所有应用列表
all_apps = get_all_installed_apps()
for idx, app in enumerate(all_apps, 1):
    print(f"{idx}. {app['name']} - {app['package']}")

# 让用户输入包名启动应用
target_package = input("\n请输入要启动的应用包名:")
success, message = launch_app(target_package)
print(message)

内容的提问来源于stack exchange,提问作者JuniorObom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:52:43