HarmonyOS鸿蒙Next应用开发-如何打开第三方应用

HarmonyOS鸿蒙Next应用开发-如何打开第三方应用 参数说明: Context:this
appPkg:app的apk包名
AbilityName:app启动类路径

  1. 判断设备上是否安装该应用
boolean isAppExist(Context context, String appPkg) {
    try {
        IBundleManager manager = context.getBundleManager();
        return manager.isApplicationEnabled(appPkg);
    } catch (IllegalArgumentException e) {
        return false;
    }
}
  1. 如果已经下载则打开app
public void launchAppDetail(String appPkg, String AbilityName){
    Intent intent = new Intent();
    Set<String> entities = new HashSet<>();
    entities.add("android.intent.category.LAUNCHER");
    Operation operation = new Intent.OperationBuilder()
        .withDeviceId("")
        .withBundleName(appPkg)
        .withAbilityName(AbilityName)
        .withAction("android.intent.action.MAIN")
        .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
        .withEntities(entities)
        .build();
    intent.setOperation(operation);
    startAbility(intent);
}
  1. 如果还未安装则跳转到应用商场
public void AppShop(String appPkg){
    HiLog.info(log,"launchAppDetail");
    if(appPkg.isEmpty())return;
    Uri uri = Uri.parse("market://details?id="+appPkg);
    HiLog.info(log,"uri:"+uri);
    Intent intent = new Intent();
    intent.setUri(uri).addFlags(Intent.FLAG_ABILITY_NEW_MISSION);
    startAbility(intent,0);
}
  1. 如果未上架应用商场,跳转到网站上下载
public void AppWeb(String url){
    Intent intent = new Intent();
    Operation operation = new Intent.OperationBuilder()
        .withUri(Uri.parse(url))
        .build();
    intent.setOperation(operation);
    startAbility(intent);
}

下面是一些安卓常用的apk包名,紧供参考:

// 微信 包名 com.tencent.mm //启动类名:com.tencent.mm.ui.LauncherUI
// QQ 包名 com.tencent.mobileqq //启动类名:com.tencent.mobileqq.activity.HomeActivity
// 支付宝 包名:com.eg.android.AlipayGphone //启动类名com.eg.android.AlipayGphone.FastStartActivity
// 钉钉 包名:com.alibaba.android.rimet //启动类名:com.alibaba.android.rimet.biz.home.activity.HomeActivity
// QQ空间 包名:com.qzone
// QQ手机管家 包名:com.tencent.qqpimsecure
// 微博 包名:com.sina.weibo //启动类名:com.sina.weibo.EditActivity
// 天天动听 包名:com.sds.android.ttpod
// 中华万年历 包名:cn.etouch.ecalendar
// 百度地图 包名:com.baidu.BaiduMap
// 高德地图 包名:com.autonavi.minimap //启动类名:com.autonavi.map.activity.SplashActivity
// 信息 包名:com.android.mms
// 设置 包名:com.android.settings
// 浏览器 包名:com.android.browser
// 计算器 包名:com.android.calculator2
// 时钟 包名:com.android.deskclock
// 图库 包名:com.android.gallery3d
// 相机 包名:com.android.hwcamera
// 音乐 包名:com.android.mediacenter
// 收音机 包名:com.huawei.android.FMRadio
// 录音机 包名:com.android.soundrecorder
// UC浏览器 包名:com.UCMobile
// 美图秀秀 包名:com.mt.mtxx.mtxx
// PPTV 包名:com.pplive.androidphone
// 书旗免费小说 包名:com.shuqi.controller
// 360手机助手 包名:com.qihoo.appstore
// 360卫士 包名:com.qihoo360.mobilesafe
// 360清理大师 包名:com.qihoo.cleandroid_cn
// 百度手机助手 包名:com.baidu.appsearch
// 豌豆荚 包名:com.wandoujia.phoenix2
// 小米应用商店 包名:com.xiaomi.market
// 华为应用商店 包名:com.huawei.appmarket
// 安智应用商店 包名:com.hiapk.marketpho
// R.E.管理器 包名:com.speedsoftware.rootexplorer
// PP手机助手 包名:com.pp.assistant
// OPPO应用商店 包名:com.oppo.market
// 联想应用商店 包名:com.lenovo.leos.appstore
// 应用宝 包名:com.tencent.android.qqdownloader

apk包名
原文链接:https://blog.csdn.net/qq_38922435/article/details/113810563

蛟龙腾飞整理与练习。


更多关于HarmonyOS鸿蒙Next应用开发-如何打开第三方应用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

我试试,正好六楼说了

更多关于HarmonyOS鸿蒙Next应用开发-如何打开第三方应用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


上面的写法在api6上报错说 没有 FLAG_ACTIVITY_NEW_TASK 真实写法如下 亲测可用

姓名: 张三
年龄: 30
职业: 软件工程师

项目经验

  • 项目一:

    • 负责前端页面开发
    • 使用React框架
  • 项目二:

    • 负责后端服务开发
    • 使用Node.js和Express框架

跳转到网站那一段,实测app会闪退

我这正常
你是不是没申请网络权限

image.png

你用的是Java UI框架开发的吧?

现在有明确的规定,不让应用之间互拉的吧。

如何调用第三方app打开某一特定名称文件

在设置,应用服务里,可以看到所有APP的信息吧。

如何列出系统中所有已安装的app的信息

大家讨论的还是挺热烈的。

我用的是JS ui框架开发的,不知道 是不是这个原因导致闪退的

在HarmonyOS鸿蒙Next中,打开第三方应用可以通过Intent实现。首先,确保目标应用已安装。然后,使用ohos.app.ContextstartAbility方法,传入包含目标应用包名和类名的Intent对象。例如:

Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
    .withBundleName("com.example.app") // 目标应用包名
    .withAbilityName("com.example.app.MainAbility") // 目标应用的主Ability
    .build();
intent.setOperation(operation);
startAbility(intent);

确保在config.json中声明了相关权限。

回到顶部