首页 > 其他分享 >HarmonyOS Next 简单上手元服务开发

HarmonyOS Next 简单上手元服务开发

时间:2024-12-15 19:33:57浏览次数:4  
标签:手元 服务 100% HomeView Next HarmonyOS AtomicServiceWeb height 页面

HarmonyOS Next 简单上手元服务开发

万物互联时代,人均持有设备量不断攀升,设备种类和使用场景更加多样,使得应用开发、应用入口变得更加复杂。在此背景下,应用提

供方和用户迫切需要一种新的服务提供方式,使应用开发更简单、服务(如听音乐、打车等)的获取和使用更便捷。为此,HarmonyOS

除支持传统的需要安装的应用(以下简称传统应用)外,还支持更加方便快捷的免安装的应用,即元服务。

元服务是HarmonyOS提供的一种轻量应用程序形态,具备秒开直达,纯净清爽;服务相伴,恰合时宜;即用即走,账号相随;一体两

面,嵌入运行;原生智能,全域搜索;高效开发,生而可信等特征。

元服务可独立上架、分发、运行,独立实现业务闭环,可大幅提升信息与服务的获取效率。

元服务和应用的的区别

image-20241124191141178

元服务开发旅程

image-20241124191156792

在AGC平台上新建一个项目

链接

一个项目可以多个应用

image-20241124191241104

AGC新建一个元服务应用

image-20241124191300505

新建一个本地元服务项目

image-20241124191643071


如果成功在AGC平台上新建过元服务,那么这里会自动显示

image-20241124191744693

修改元服务名称

image-20241124191327227

修改元服务图标

重要,上架审核很严谨

image-20241124191343134

  1. 先自己下载随意一张图片

  2. 使用画图工具 图像属性 修改 1024px

    PixPin_2024-11-24_19-15-16

  3. 使用开发工具中 Image Asset 来制作图片

image-20241124191814129

image-20241124192132959

新增元服务卡片

Win模拟器 不支持新增元服务的卡片

新建卡片

image-20241124192208171

image-20241124192221915

元服务开发中收到的限制

每一个包大小不能超过2M

image-20241124192250939

元服务项目总大小 一般是10M,特殊情况可以申请20M

服务卡片最多16张

服务卡片不能随意通过卡片跳转其他其他应用或者元服务

服务卡片不能使用call事件

AtomicServiceTabs

实现tab切换和标题设置

image-20241124192911325

// Index.ets
import { AtomicServiceTabs, TabBarOptions, TabBarPosition, OnContentWillChangeCallback } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State message: string = '首页';
  @State currentIndex: number = 0;

  @Builder
  tabContent1() {
    Column().width('100%').height('100%').alignItems(HorizontalAlign.Center).backgroundColor('#00CB87')
  }

  @Builder
  tabContent2() {
    Column().width('100%').height('100%').backgroundColor('#007DFF')
  }

  @Builder
  tabContent3() {
    Column().width('100%').height('100%').backgroundColor('#FFBF00')
  }

  build() {
    Stack() {
      AtomicServiceTabs({
        tabContents: [
          () => {
            this.tabContent1()
          },
          () => {
            this.tabContent2()
          },
          () => {
            this.tabContent3()
          }
        ],
        tabBarOptionsArray: [
          new TabBarOptions($r('sys.media.ohos_ic_public_phone'), '绿色', Color.Black, Color.Blue),
          new TabBarOptions($r('sys.media.ohos_ic_public_location'), '蓝色', Color.Black, Color.Blue),
          new TabBarOptions($r('sys.media.ohos_ic_public_more'), '黄色', Color.Black, Color.Blue)
        ],
        tabBarPosition: TabBarPosition.BOTTOM,
        barBackgroundColor: $r('sys.color.ohos_id_color_bottom_tab_bg'),

      })
 
    }.height('100%')
  }
}

AtomicServiceNavigation

路由管理

PixPin_2024-11-24_19-32-52

Index

// Index.ets
import {
  AtomicServiceNavigation,
  NavDestinationBuilder,
  AtomicServiceTabs,
  TabBarOptions,
  TabBarPosition
} from '@kit.ArkUI';
import { HomeView } from '../views/HomeView';

export interface IParam {
  id: number
}

@Entry
@Component
struct Index {
  @StorageProp("safeTop")
  safeTop: number = 0
  @StorageProp("safeBottom")
  safeBottom: number = 0
  @State message: string = '主题';
  // 页面跳转
  @Provide("pathStack")
  pathStack: NavPathStack = new NavPathStack();

  @Builder
  navigationContent() {
    Button("内容")
      .onClick(() => {
        const param: IParam = { id: 100 }
        this.pathStack.pushPathByName("HomeView", param)
      })
  }

  @Builder
  // 路由页面映射的  以前 navNavigation 修改配置文件!!!
  pageMap(name: string) {
    if (name === 'HomeView') {
      HomeView()
    }
  }

  build() {
    Row() {
      Column() {
        // navNavigation 类似
        AtomicServiceNavigation({
          // 容器内直接显示的内容
          navigationContent: () => {
            this.navigationContent()
          },
          // 标题!!
          title: this.message,
          //
          titleOptions: {
            backgroundColor: '#fff',
            isBlurEnabled: false
          },
          // 路由页面映射
          navDestinationBuilder: this.pageMap,
          navPathStack: this.pathStack,
          mode: NavigationMode.Stack
        })
      }
      .width('100%')
    }
    .height('100%')
    .padding({
      top: this.safeTop,
      bottom: this.safeBottom
    })
  }
}

HomeView

import { IParam } from "../pages/Index"
import { promptAction } from "@kit.ArkUI"

@Component
export struct HomeView {
  @Consume("pathStack")
  pathStack: NavPathStack

  aboutToAppear() {
    const param = this.pathStack.getParamByName("HomeView").pop() as IParam
    promptAction.showToast({ message: `${param.id}` })
  }

  build() {
    NavDestination() {
      Column() {
        Text("homeView")
          .fontSize(50)
      }
      .width("100%")
      .height("100%")
      .justifyContent(FlexAlign.Center)
    }
  }
}

AtomicServiceWeb

为开发者提供满足定制化诉求的Web高阶组件,屏蔽原生Web组件中无需关注的接口,并提供JS扩展能力

AtomicServiceWeb后续将不再支持registerJavaScriptProxyrunJavaScript等接口。若需要Web组件加载的网页中调用元服务原生页面

的对象方法,可通过JS SDK提供的接口获取相关数据。若JS SDK接口无法满足需求,还可通过传参的方式,元服务原生页面执行对象方法

后获取结果,将结果传递给Web组件加载的网页中。

在元服务内,仅能使用AtomicServiceWeb组件显示Web页面,且需要配置业务域名。

请参考:AtomicServiceWeb组件参考配置业务域名

基本使用

  1. 新建了组件WebHome 用来显示 AtomicServiceWeb容器

    1. import { AtomicServiceWeb, AtomicServiceWebController } from '@ohos.atomicservice.AtomicServiceWeb'
      
      @Entry
      @Component
      export struct WebHome {
        @State
        ascontroller: AtomicServiceWebController = new AtomicServiceWebController()
      
        build() {
          NavDestination() {
            Column() {
              AtomicServiceWeb({ src: $rawfile("index.html"), controller: this.ascontroller })
                .width("100%")
                .height("100%")
            }
            .width("100%")
            .height("100%")
            .justifyContent(FlexAlign.Center)
          }
        }
      }
      
  2. 新建h5页面 index.html

    image-20241124193502932

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <style>
        body{
          background-color: red;
        }
      </style>
    </head>
    <body>
      
    </body>
    </html>
    
  3. 在Index 添加了添加跳转到 WebHome

    image-20241124193524156

  4. WebHome 使用 AtomicServiceWeb 容器显示内容

    PixPin_2024-11-24_19-40-02

鸿蒙页面传递数据到h5页面

通过 src属性传递

image-20241124194101296

h5页面接收和处理

image-20241124194121169

h5页面调用元服务方法

html中,如果需要调用元服务API,可集成元服务JS SDK,调用相关API进行访问

安装

npm install @atomicservice/asweb-sdk

使用方法

es6

import has from '@atomicservice/asweb-sdk';has.asWeb.getEnv({  callback: (err, res) => {  }});

umd

<script src="../dist/asweb-sdk.umd.js"></script><script>  has.asWeb.getEnv({    callback: (err, res) => {    }  });</script>

更多方法

image-20241124194443319

元服务发送网络请求

  1. 申请权限 在AGC平台上 把请求的域名填写到 白名单中 - 上线必须要做

    image-20241124194529204

  2. 在手机-设置-系统-应用-元服务豁免管控 打开 - 开发阶段也能发送请求

    模拟器不受限制

总结

image-20241124194617678

标签:手元,服务,100%,HomeView,Next,HarmonyOS,AtomicServiceWeb,height,页面
From: https://www.cnblogs.com/aspXiaoBai/p/18608372

相关文章

  • HarmonyOS Next 如何优雅的编写注释
    HarmonyOSNext如何优雅的编写注释程序员箴言我最讨厌世界上的两种人:第一种是不写注释的人第二种是让我写注释的人前言随着HarmonyOSNEXT的发展加快,不少的公司已经陆续加大了资源来开发软件项目。那么伴随项目的发展,项目团队也需要按照一定的规范来编写项目注释或者......
  • HarmonyOS Next 开发的艺术 面向对象
    HarmonyOSNext开发的艺术面向对象聊聊应用的开发范式Harmony应用的主要开发范式,是采用了类似面向对象的范式。struct在java语言中表示结构体。前端工程师可以将其看成是class即可其实这个开发风格会给大部分的前端工程师不太适应的感觉。因为目前主流的前端开发框架......
  • HarmonyOS Next 实战卡片开发 01
    HarmonyOSNext实战卡片开发01介绍FormKit(卡片开发服务)提供一种界面展示形式,可以将应用的重要信息或操作前置到服务卡片(以下简称“卡片”),以达到服务直达、减少跳转层级的体验效果。卡片常用于嵌入到其他应用(当前被嵌入方即卡片使用方只支持系统应用,例如桌面)中作为其界面显示......
  • HarmonyOS Next 设计模式-单例模式
    HarmonyOSNext设计模式-单例模式前言软件设计模式([Designpattern](https://baike.baidu.com/item/Designpattern/10186718?fromModule=lemma_inlink)),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代......
  • HarmonyOS Next 实战卡片开发 02
    HarmonyOSNext实战卡片开发02卡片开发中,还有一个难点是显示图片。其中分为显示本地图片和显示网络图片显示本地图片卡片可以显示本地图片,如存放在应用临时目录下的图片。路径比如/data/app/el2/100/base/你的项目boundleName/temp/123.png以下操作是为了得到一张该目......
  • HarmonyOS Next 并发 taskpool 和 worker
    HarmonyOSNext并发taskpool和worker总览介绍并发,指的是同一时间内,多段代码同时执行。在ArkTs编程中,并发分为异步并发和多线程并发。异步并发异步并发并不是真正的并发,比如在单核设备中,同时执行多端代码其实是通过CPU快速调度来实现的。比如一个司机,它在同一时间只......
  • next_js 存在缓存中毒漏洞(CVE-2024-46982)
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • 鸿蒙NEXT开发案例:经纬度距离计算
     【引言】在鸿蒙NEXT平台上,我们可以轻松地开发出一个经纬度距离计算器,帮助用户快速计算两点之间的距离。本文将详细介绍如何在鸿蒙NEXT中实现这一功能,通过简单的用户界面和高效的计算逻辑,为用户提供便捷的服务。【环境准备】•操作系统:Windows10•开发工具:DevEcoStudio......
  • LeetCode //C - 496. Next Greater Element I
    496.NextGreaterElementIThenextgreaterelementofsomeelementxinanarrayisthefirstgreaterelementthatistotherightofxinthesamearray.Youaregiventwodistinct0-indexedintegerarraysnums1andnums2,wherenums1isasubsetof......
  • HarmonyOS AnimatableExtend装饰器的使用说明
    @AnimatableExtend装饰器用于自定义可动画的属性方法,允许开发者在动画执行过程中通过逐帧回调函数修改不可动画属性值,从而使不可动画属性也能实现动画效果。语法@AnimatableExtend(UIComponentName)functionfunctionName(value:typeName){.propertyName(value)}@Anima......