#星光计划1.0#[鸿蒙开发]开发笔记:卡片跳转其他APP 原创 精华

甜甜爱开发
发布于 2021-10-28 15:25
浏览
4收藏

本文正在参与51CTO HarmonyOS技术社区创作者激励-星光计划1.0

一、需求概述

实际项目开发中,卡片或是卡片跳转的页面都需要跳转到其他APP上,比如你为某一个APP开发卡片应用,该APP还没有完全实现鸿蒙版本,只是抽取某些重要功能进行卡片开发,那就需要卡片或是卡片跳转到其他APP,这其中会涉及到一些问题,本文章归类这些遇到的问题。

二、开发过程

1.卡片开发

卡片开发,社区里面有很多文章,官方文档也有,就不再赘述。强烈推荐张荣超老师的文章:鸿蒙卡片开发超细致总结

2.如何获取应用包名

如果我们并不知道要跳转的APP的包名,怎么获取呢?很简单,把应用安装到鸿蒙模拟器上,然后在通过HiLog筛选,就可以知道包名了。以爱奇艺为例
#星光计划1.0#[鸿蒙开发]开发笔记:卡片跳转其他APP-鸿蒙开发者社区

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

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-10-28 15:25:40修改
7
收藏 4
回复
举报
1条回复
按时间正序
/
按时间倒序
mb61addbdba7831
mb61addbdba7831

楼主你好如果只通过包名跳转三方app不指定到哪个页面怎么办呢?

回复
2021-12-6 18:47:18
回复
    相关推荐