#星光计划1.0#[鸿蒙开发]开发笔记:卡片跳转其他APP 原创 精华
本文正在参与51CTO HarmonyOS技术社区创作者激励-星光计划1.0
一、需求概述
实际项目开发中,卡片或是卡片跳转的页面都需要跳转到其他APP上,比如你为某一个APP开发卡片应用,该APP还没有完全实现鸿蒙版本,只是抽取某些重要功能进行卡片开发,那就需要卡片或是卡片跳转到其他APP,这其中会涉及到一些问题,本文章归类这些遇到的问题。
二、开发过程
1.卡片开发
卡片开发,社区里面有很多文章,官方文档也有,就不再赘述。强烈推荐张荣超老师的文章:鸿蒙卡片开发超细致总结
2.如何获取应用包名
如果我们并不知道要跳转的APP的包名,怎么获取呢?很简单,把应用安装到鸿蒙模拟器上,然后在通过HiLog筛选,就可以知道包名了。以爱奇艺为例
3.跳转之前判断是否安装该应用
知道包名了,我们要跳转之前就需要判断是否安装该应用,然后再进一步操作,判断代码如下:
public boolean isAPPInstall(String bundleName) {
try {
getBundleManager().isApplicationEnabled(bundleName);
return true;
} catch (java.lang.IllegalArgumentException ex) {
return false;
}
}
4.应用安装直接打开应用
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withBundleName("com.qiyi.video")
.withAbilityName("com.qiyi.video.WelcomeActivity")
.withDeviceId("")
.withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
.build();
intent.setOperation(operation);
startAbility(intent);
5.没有安装,打开华为市场详情页
通过.withUri(Uri.parse(“market://details?id=” + 包名)),包名用具体跳转的包名代替,比如跳转到华为市场爱奇艺的详情页,.withUri(Uri.parse(“market://details?id=” + “com.qiyi.video”))
private IntentAgent StartAppMarket(){
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withUri(Uri.parse("market://details?id=" + 包名))
.withAction("android.intent.action.VIEW")
.withBundleName("com.huawei.appmarket")
.withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
.build();
intent.setOperation(operation);
List<Intent> list = new ArrayList<>();
list.add(intent);
List<IntentAgentConstant.Flags> flags = new ArrayList<>();
flags.add(IntentAgentConstant.Flags.UPDATE_PRESENT_FLAG);
IntentAgentInfo intentAgentInfo = new IntentAgentInfo(200,IntentAgentConstant.OperationType.START_ABILITY, flags,list,null);
return IntentAgentHelper.getIntentAgent(context,intentAgentInfo);
}
6.直接跳转下载链接,用自带浏览器
private IntentAgent startUrl(String Url){
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withUri(Uri.parse(Url))
.withAction("android.intent.action.VIEW")
.withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
.build();
intent.setOperation(operation);
List<Intent> list = new ArrayList<>();
list.add(intent);
List<IntentAgentConstant.Flags> flags = new ArrayList<>();
flags.add(IntentAgentConstant.Flags.UPDATE_PRESENT_FLAG);
IntentAgentInfo intentAgentInfo = new IntentAgentInfo(200,IntentAgentConstant.OperationType.START_ABILITY, flags,list,null);
return IntentAgentHelper.getIntentAgent(context,intentAgentInfo);
}
总结
在开发过程中,我们经常遇到要跳转系统相册啊,跳转系统浏览器啊等等,我们可以参考Android是怎么跳转的,然后照样画葫芦,就可以推算出怎么写,Android与Harmony在代码上有很多共同原理,所以当你不知道怎么写harmony的时候,你可以想想Android怎么写的,比如上面跳转自带浏览器,我就是参考Android的,Android的写法如下:
final Uri uri = Uri.parse("https://saddleback.v2s.mobi/");
final Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
只要知道Action,把Action放在对应的.WithAction中就可以,然后在 .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT),Intent.FLAG_NOT_OHOS_COMPONENT这个Flag是指查找非鸿蒙应用的。这样类推就可以写出很多代码。同理,如果鸿蒙开发中,有功能需要实现的,也可以看看Android怎么实现,一般就知道鸿蒙怎么实现了。
本文正在参与51CTO HarmonyOS技术社区创作者激励-星光计划1.0
楼主你好如果只通过包名跳转三方app不指定到哪个页面怎么办呢?