【HarmonyOS】元服务和APP的相互跳转、相互成就

这篇具有很好参考价值的文章主要介绍了【HarmonyOS】元服务和APP的相互跳转、相互成就。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【关键字】

卡片、跳转、加桌

 

【背景介绍】

随着鸿蒙生态的发展,各种类型的应用都已经可以在Harmony OS上无差异的运行,面对鸿蒙新兴元服务的兴起,各大厂家可能都在考虑一个问题:如果已经有APP了,有必要再开发一款元服务吗?是化蛇添足还是画龙点睛?元服务跟已有应用是什么关系?维护工作会不会多?

回答问题之前我们先看一张图:

 

这些原生APP仿佛有一大堆话憋在肚子里,试图通过右上方的提示气泡呼唤用户,仿佛再说:点我,点我。反观元服务这个标题党简直晃眼,并且元服务也是基于系统级API开发的,性能、设计、效果和流畅程度都可以比肩原生APP,然而 元服务也不是十项全能,从官方定义就能看出:原子化服务是HarmonyOS提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。受限于HAP包大小限制,注定只能承载单一的业务。APP相比元服务能提供更完整、更丰富的应用体验;

看完区别我们再回到上面问题(以打车类型应用为例):

(一)通过APP引导用户添加元服务到桌面,即可以让用户使用更加方便;也可以让厂商推广更加容易;并且只需要开发一些元服务的页面;运维都使用现有服务的接口;

 

技术实现:参照AGDS Preview Link,当前免费对外开放;

(二)充分利用元服务的各种接入方式和免安装的特点抢先服务用户,抢占用户;想想这年头如果敲敲桌子就能点菜,还有人会去打开摄像头瞄准对焦吗?更别提下载个APP了;

 

 

有了元服务再逐步引导用户下载APP享用更丰富的APP能力,跟用户深度绑定;

技术实现:创建demo工程,选择JS语言开发,在index/index.hml中编写页面布局

代码如下:

<div class="container">
    <div class="copyText" onclick="goApp">
        <text>
            <span>more</span>
        </text>
    </div></div>
【HarmonyOS】元服务和APP的相互跳转、相互成就

index/index.css编写样式

.container{
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    align-items: center;
    height: 100%;
    width: 100%;
    background-color: aliceblue;
}
.go-div{
    width:400px;
    padding: 20px;
    justify-content:center;
    background-color:#EA545D;
    color:white;
    height: 100px;
    margin-bottom: 40px;
    margin-top: 20px;
    border-radius:20px;
}
【HarmonyOS】元服务和APP的相互跳转、相互成就

跳转实现代码在index/index.js中实现

export default{
    data:{

    },
    async goApp(){
        var actionData = {};
        var action = {};
        action.bundleName = "com.h.j.hmservice";
        action.abilityName = "com.huawei.jsproject.ServiceAbility";
        action.messageCode = 1;
        action.data = actionData;
        action.abilityType = 0;
        action.syncOption = 1;
        await FeatureAbility.callAbility(action);

    }
}
【HarmonyOS】元服务和APP的相互跳转、相互成就

新建ServiceAbility用来处理JS请求并实现跳转逻辑

public class ServiceAbility extends Ability {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "Demo");
    private MyRemote remote = new MyRemote();
    private Context context;

    @Override
    public IRemoteObject onConnect(Intent intent) {
        HiLog.info(LABEL_LOG, "IRemoteObject::onConnect");
        this.context = this;
        super.onConnect(intent);
        return remote.asObject();
    }
    class MyRemote extends RemoteObject implements IRemoteBroker {
        MyRemote() {
            super("MyService_MyRemote");
        }
        @Override
        public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {
            System.out.println("test js Go");
            switch (code) {
                case 1: {
                    //如果APP已存在拉起APP
                    if (isAppExist(context, "com.petal.litegames")) {
                        Intent intent = new Intent();
                        Set<String> entities = new HashSet<>();
                        entities.add("android.intent.category.LAUNCHER");
                        Operation operation = new Intent.OperationBuilder()
                                .withDeviceId("")
                                .withBundleName("com.petal.litegames")
                                .withAction("android.intent.action.MAIN")
                                .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
                                .withEntities(entities)
                                .build();
                        intent.setOperation(operation);
                        startAbility(intent);
                   //如果APP不存在跳转到下载页面
                    } else {
                        Intent intent = new Intent();
                        Operation operation = new Intent.OperationBuilder()
                                .withAction("android.intent.action.VIEW")
                                .withUri(Uri.parse("https://url.cloud.huawei.com/iwTjB76GHe?shareTo=qrcode"))
                                .withFlags(Intent.FLAG_ABILITY_NEW_MISSION)
                                .build();
                        intent.setOperation(operation);
                        startAbility(intent);
                    }
                    break;
                }
                default: {
                    Map<String, Object> result = new HashMap<String, Object>();
                    reply.writeString(ZSONObject.toZSONString(result));
                    return false;
                }
            }
            return true;
        }
        @Override
        public IRemoteObject asObject() {
            return this;
        }
    }
    boolean isAppExist(Context context, String appPkg) {
        try {
            IBundleManager manager = context.getBundleManager();
            return manager.isApplicationEnabled(appPkg);
        } catch (IllegalArgumentException e) {
            return false;
        }
    }}
【HarmonyOS】元服务和APP的相互跳转、相互成就

把什么功能放在元服务中需要开发者根据用户使用场景各自划分了,最后期待元服务百花齐放。

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh文章来源地址https://www.toymoban.com/news/detail-465867.html

到了这里,关于【HarmonyOS】元服务和APP的相互跳转、相互成就的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • static关键字和final关键字

    在java的中,static和final是两个必须掌握的。static和final用法多样,且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面将依次介绍static和final。注意,某些场景下,staic和final可以联合使用

    2024年02月09日
    浏览(61)
  • 搜索引擎优化指南:SEO关键字、长尾关键字、短尾关键字以及反向链接

    SEO 代表“搜索引擎优化”。它是一种数字营销策略,旨在提高网站或网页在搜索引擎未付费结果中的在线可见性。通常,网站在搜索结果页面中排名越高,或在搜索结果列表中显示的频率越高,它将从搜索引擎用户那里获得的访问者就越多。 SEO 策略可以针对各种类型的搜索

    2024年02月04日
    浏览(148)
  • 【iOS】—— 属性关键字及weak关键字底层原理

    参考博客:IOS开发基础——属性(copy strong weak等) 内存管理有关的: weak , assign , strong , retain , copy 线程安全有关的的: nonatomic , atomic 访问权限有关的的: readonly , readwrite (只读,可读写) 修饰变量的: const , static , extern 这些

    2024年02月16日
    浏览(42)
  • 拼多多关键字搜索API-通过关键字获取拼多多商品列表

    pinduoduo.item_search 公共参数 请求地址: pinduoduo/item_search 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secret String 是 调用密钥 api_name String 是 API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等] cache String 否 [yes,no]默认yes,将调用缓存的数据

    2024年02月22日
    浏览(82)
  • 【Java入门】final关键字、static关键字、内部类的认识

    前言 : final是Java中的一个修饰符,用于表示某个变量、方法或者类不能被修改。final可以用于修饰类、方法和变量(局部变量,成员变量)。被final所修饰的类不能被继承,被final所修饰的方法不能被重写,被final所修饰的变量,不能被重新赋值 。 static是Java中的一

    2024年02月11日
    浏览(55)
  • ElasticSearch nested 字段多关键字搜索,高亮全部匹配关键字的处理

    ElasticSearch 版本号: 6.7.0 用户会传入多个去ES查询 ElasticSearch nested 字段 的多个字段,要求在返回的结果中被搜索的字段需要高亮所有匹配的。例如同时通过 上海 和 策划 ,再 工作经历 的列表中的 工作内容 和 公司名称 中搜索。如果有人员的 工作经历 中

    2024年04月22日
    浏览(59)
  • 用python实现给出关键字查找并标注pdf文件中关键字

    要在Python中标注PDF文件中的,可以使用Python的PDFMiner库和Python的matplotlib库。 首先,需要安装这两个库。可以使用pip命令进行安装: shell 复制代码 pip install pdfminer.six matplotlib 接下来,可以使用以下代码实现查找和标注功能: python 复制代码 import pdfminer   from pdf

    2024年01月16日
    浏览(71)
  • Java面向对象——多态、Object类、instanceof关键字以及final关键字

    总之,多态是面向对象编程中一个非常重要的概念,通过它可以实现统一的接口来操作不同的对象,提高代码的可读性和可维护性。在实际编程中,多态性的使用可以使代码更加灵活和扩展性更强。方法重写是实现多态的基础。 重写如下所示 关于hashCode方法的重写: 重写t

    2024年02月12日
    浏览(70)
  • ES6中let和const关键字与var关键字之间的区别?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(55)
  • 【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字

    在C语言中,同名函数是不能出现在同一作用域的,但是在C++中却可以,但是要满足函数重载的规则。 那什么是函数重载呢?它的规则是什么呢? 函数重载 :是函数的一种特殊情况,C++允许在 同一作用域 中声明几个功能类似的 同名函数 ,这些同名函数的 形参列表(参数个数

    2024年04月26日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包