0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony如何启动FA(本地和远程)

ArkUI详解 来源:鸿蒙实验室 作者:鸿蒙实验室 2022-07-02 13:41 次阅读

大家好,今天我们来一起学习分布式相关的内容,其实对于分布式任务调度,就是对数据管理的另一种形式

启动本地设备FA

首先创建一个项目

如图所示:

poYBAGK_2nSAJIoQAAH2eQ8Zgm0872.png

点击finish即可

然后我们接下来先进行一些基础设置

我们要在DAYU200开发板上运行这个实例,所以要做一个签名设置

点击File--- Project Struct,

pYYBAGK_2naAM15EAAHq13OeHQc987.png

然后点击Signing Configs 完成签名设置

poYBAGK_2nmACjC0AAJyAsgyAZE630.png

点击ok就会完成自动签名。到了这儿,我们的第一步也算是完成了,接下来我们看一下下一步如何操作

回到我们今天的主题,我们是要启动本地的另一个FA,但是目前只有一个,所以我们这个时候需要再创建一个

在entry模块依次点击New-Ability-PageAbility,就可以创建另一个FA,我们命名为SecondAbility

pYYBAGK_2n6AZZmeAAUQUCXfP7g810.png

poYBAGK_2n-AS2SEAADeHNUv5zc606.png

如下图所示,我们已经创建成功

pYYBAGK_2oCAb44AAAEIV_W2xw0369.png

修改SecondAbility中的默认message

@State message: string = 'SecondAbility'

到这儿我们的第二步就算完成了

由于我们启动的是本地的FA,后边为了区别启动远程FA,所以我们需要对文件进行一个重命名,这样方便我们认识。

我们点击MainAbility‘中的index.ets,右击进行重命名

poYBAGK_2oGAAHjzAACNUJNy1Q4451.png

完成以上的步骤,编辑器会帮助我们对onfig.json中对项目进行重构

{

"app"

: {

"vendor"

:

"example"

,

"bundleName"

:

"com.jianguo.openharmony"

,

"version"

: {

"code"

:

1000000

,

"name"

:

"1.0.0"

}

},

"deviceConfig"

: {},

"module"

: {

"mainAbility"

:

".MainAbility"

,

"deviceType"

: [

"phone"

,

"tablet"

],

"abilities"

: [

{

"skills"

: [

{

"entities"

: [

"entity.system.home"

],

"actions"

: [

"action.system.home"

]

}

],

"orientation"

:

"unspecified"

,

"visible"

:

true

,

"srcPath"

:

"MainAbility"

,

"name"

:

".MainAbility"

,

"srcLanguage"

:

"ets"

,

"icon"

:

"$media:icon"

,

"description"

:

"$string:MainAbility_desc"

,

"formsEnabled"

:

false

,

"label"

:

"$string:MainAbility_label"

,

"type"

:

"page"

,

"launchType"

:

"standard"

},

{

"orientation"

:

"unspecified"

,

"srcPath"

:

"SecondAbility"

,

"name"

:

".SecondAbility"

,

"srcLanguage"

:

"ets"

,

"icon"

:

"$media:icon"

,

"description"

:

"$string:SecondAbility_desc"

,

"formsEnabled"

:

false

,

"label"

:

"$string:SecondAbility_label"

,

"type"

:

"page"

,

"launchType"

:

"standard"

}

],

"distro"

: {

"moduleType"

:

"entry"

,

"installationFree"

:

false

,

"deliveryWithInstall"

:

true

,

"moduleName"

:

"entry"

},

"package"

:

"com.example.entry"

,

"srcPath"

:

""

,

"name"

:

".entry"

,

"js"

: [

{

"mode"

: {

"syntax"

:

"ets"

,

"type"

:

"pageAbility"

},

"pages"

: [

"pages/start_local_fa"

],

"name"

:

".MainAbility"

,

"window"

: {

"designWidth"

:

720

,

"autoDesignWidth"

:

false

}

},

{

"mode"

: {

"syntax"

:

"ets"

,

"type"

:

"pageAbility"

},

"pages"

: [

"pages/index"

],

"name"

:

".SecondAbility"

,

"window"

: {

"designWidth"

:

720

,

"autoDesignWidth"

:

false

}

}

]

}

}

接下来我们就看一下最关键的一步,如何启动本地FA

我们可以利用一个button按钮来对其进行跳操作

最主要的就是onclick里面的事件

如下图所示:

使用的时候注意导入包:

import featureAbiltty from '@ohos.ability.featureAbility'

featureAbiltty.startAbility({

want:

{

//设备Id,本机默认为空

deviceId:"",

//app名称,在config.json的bundleName

bundleName:"com.jianguo.openharmony",

//页面名称,注意包名

abilityName:"com.example.entry.SecondAbility"

}

然后我对上面的

deviceId:进行说明本机默认为空,

bundleName:在config.json的bundleName

abilityName:页面名称,注意包名

pYYBAGK_2oKABSuCAACnuqAvp5U058.png

然后我们在DATU20运行

发现可以跳转,那么我们就实现了这个功能

跨设备启动FAs

接下来我们看一下如何启动远程的deviceId

在这之前,我们需要做的事就是,在config.json配置权限

非敏感权限在这儿定义就好,如果是敏感权限,就要在运行时发送弹窗的形式去处理。

"reqPermissions": [

{

"name": "ohos.permission.DISTRIBUTED_DATASYNC"

}

]

poYBAGK_2oOAef7iAACDFjmNyYs309.png

远程启动注意点:

权限deviceId

动态申请权限

//设备管理器

import deviceMAnager from'@ohos.distributedHardware.deviceManager'

import featureAbilty from '@ohos.ability.featureAbility'

//设备管理器

import deviceMAnager from '@ohos.distributedHardware.deviceManager'

//远端app信息

import bundle from '@ohos.bundle';

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

//动态申请权限,弹窗的形式,可以通用,注意修改两个地方,一个是包名,一个是权限列表

async function requestPermision() {

let array: Array = ["ohos.permission.DISTRIBUTED_DATASYNC"]

const appInfo = await bundle.getApplicationInfo("com.jianguo.openharmony", 0, 100)

let tolenId = appInfo.accessTokenId;

const atManger = abilityAccessCtrl.createAtManager();

let requestPressions: Array = []

//遍历权限是否通过

for (let i = 0;i < array.length; i++) {

let result = await atManger.verifyAccessToken(tolenId, array[i]);

if (result != abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {

requestPressions.push(array[i]);

}

}

if (requestPressions.length == 0 || requestPressions == []) {

return;

}

let context = featureAbilty.getContext();

context.requestPermissionsFromUser(requestPressions, 1, (data) => {

console.info("XXXXXX data" + JSON.stringify(data))

})

}

@Entry

@Component

struct Index {

@State message: string = 'MainAbility'

aboutToAppear() {

//页面即将显示的时候处理,运行时发送弹窗的形式去处理

requestPermision();

}

build() {

Row() {

Column() {

Text(this.message)

.fontSize(50)

.fontWeight(FontWeight.Bold)

Button("跳转远程SecondAbility", {

type: ButtonType.Capsule

}).backgroundColor(Color.Orange).onClick((event: ClickEvent) => {

deviceMAnager.createDeviceManager("com.jianguo.openharmony", (err, value) => {

if (!err) {

let devManager = value;

//同步方式获得可信任列表

let deviceList = devManager.getTrustedDeviceListSync();

featureAbilty.startAbility({

want:

{

//设备Id,本机默认为空,这里只有两台设备,所以用数组[0]表示

deviceId: deviceList[0].deviceId,

//app名称,在config.json的bundleName

bundleName: "com.jianguo.openharmony",

//页面名称,注意包名

abilityName: "com.example.entry.SecondAbility"

}

}).then((value) => {

console.log("Succes Data" + JSON.stringify(value))

}).catch((error) => {

console.log("failed Data" + JSON.stringify(error))

})

}

})

}).width(199)

}

.width('100%')

}

.height('100%')

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    79

    文章

    1977

    浏览量

    30253
  • OpenHarmony
    +关注

    关注

    25

    文章

    3724

    浏览量

    16351
收藏 人收藏

    评论

    相关推荐

    Git命令之本地分支与远程分支关联和解除

    在实际的工作生活中,往往需要将本地的分支和远程分支关联,这样我们就可以使用git pull命令来更新拉取最新的代码,并使用git push命令将自己本地的修改推送到远程仓库。但是如果此
    的头像 发表于 12-15 09:27 3277次阅读
    Git命令之<b class='flag-5'>本地</b>分支与<b class='flag-5'>远程</b>分支关联和解除

    本地LabVIEW访问远程mysql

    之前只做过LabVIEW对本地计算机ACCESS和SQL SERVER的访问,使用的是LabSQL工具,OLEDB方式,不创建DSN,直接写入连接字符串然后SQL语句对本地数据库进行操作,对远程
    发表于 12-15 14:38

    HarmonyOS教程一基于分布式调度的能力,实现远程FA启动

    1. 介绍开发者在应用中集成分布式调度能力,通过调用指定能力的分布式接口,实现跨设备能力调度。根据Ability模板及意图的不同,分布式任务调度向开发者提供六种能力:启动远程FA(Feature
    发表于 09-10 10:07

    OpenHarmony JS在启动DevEco Studio的远程模拟器时,出现HDC异常怎么解决

    最近在研究OpenHarmony的JS应用开发,在调试应用时,在启动DevEco Studio的远程模拟器时,出现HDC异常问题;然而SDK中的toolchains目录下面拥有hdc程序
    发表于 04-08 11:27

    DevEco Studio中的真机无法启动远程FA怎么解决?

    根据Codelabs中的“( 基于分布式调度启动远程FA )”实验,在DevEcoStudio中的远程模拟器中可正常启动另一台手机中的
    发表于 05-09 11:58

    OpenHarmony开发之Ability架构

    的线程。每个Ability绑定一个独立的JSRuntime实例,因此Ability之间是隔离的。相关实例针对Ability开发,有以下相关实例可供参考:[分布式调度启动远程FA][分布式新闻客户端
    发表于 05-12 15:12

    OpenHarmony3.1release连接服务失败是为什么?怎么解决?

    (serviceAbility)可以正常连接;2、使用JS写的本地service就无法正常连接测试过以下几种情况,1、使用JS写的FA上点击按钮连接本地service失败;2、使用JS写的FA
    发表于 06-01 11:35

    请问openharmony应用必须使用开发板才能运行吗?

    openharmony应用必须使用开发板才能运行吗?本地模拟器或者远程模拟器什么时候会出来?harmonyos真机以后会兼容openharmony应用吗?
    发表于 06-14 11:13

    OpenHarmony分布式调度启动远程FA之路

    1.介绍OpenHarmony提供了分布式能力,能够实现在同一网络下对远程设备Ability的拉起。本篇Codelab,我们将一起开启OpenHarmony分布式调度启动
    发表于 07-26 14:59

    HarmonyOS/OpenHarmony应用开发-FA卡片开发体验

    :HarmonyOSOpenHarmony应用开发-FA卡片开发体验.docx示例代码:https://gitee.com/jltfcloudcn/jump_to/tree/master/FA
    发表于 12-06 14:48

    HarmonyOS/OpenHarmony应用开发-FA模型综述

    /documentation/doc-guides/fa-brief-0000001333640861*附件:HarmonyOSOpenHarmony应用开发-FA模型综述.docx
    发表于 12-07 10:39

    Linux平台智能家居的本地监控与远程监控

    Linux平台智能家居的本地监控与远程监控
    发表于 10-26 08:24 14次下载
    Linux平台智能家居的<b class='flag-5'>本地</b>监控与<b class='flag-5'>远程</b>监控

    鸿蒙开发:启动本地PageAbility

    PageAbility相关的能力通过featureAbility提供,启动本地Ability通过featureAbility中的startAbility接口实现。
    的头像 发表于 06-18 09:29 300次阅读
    鸿蒙开发:<b class='flag-5'>启动</b><b class='flag-5'>本地</b>PageAbility

    鸿蒙开发Ability Kit程序框架服务:FA模型启动Stage模型UIAbility

    本文介绍FA模型的三种应用组件如何启动Stage模型的UIAbility组件。
    的头像 发表于 06-25 16:00 374次阅读
    鸿蒙开发Ability Kit程序框架服务:<b class='flag-5'>FA</b>模型<b class='flag-5'>启动</b>Stage模型UIAbility

    鸿蒙开发Ability Kit程序框架服务:Stage模型启动FA模型PageAbility

    本小节介绍Stage模型的两种应用组件如何启动FA模型的PageAbility组件。
    的头像 发表于 06-26 09:50 375次阅读
    鸿蒙开发Ability Kit程序框架服务:Stage模型<b class='flag-5'>启动</b><b class='flag-5'>FA</b>模型PageAbility