OpenHarmony如何啟動FA(本地和遠端)
啟動本地裝置FA
首先建立一個項目
如圖所示:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcBnYldHL0FWby9mZvwVPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMz8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PwJWZ35SO2QDN0QTMygjM3UTZ0ADNzYzXzQTNwADM4AzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.webp)
點選finish即可
然後我們接下來先進行一些基礎設定
我們要在DAYU200開發闆上運作這個執行個體,是以要做一個簽名設定
點選File--- Project Struct,
然後點選Signing Configs 完成簽名設定
點選ok就會完成自動簽名。到了這兒,我們的第一步也算是完成了,接下來我們看一下下一步如何操作
回到我們今天的主題,我們是要啟動本地的另一個FA,但是目前隻有一個,是以我們這個時候需要再建立一個
在entry子產品依次點選New-Ability-PageAbility,就可以建立另一個FA,我們命名為SecondAbility
如下圖所示,我們已經建立成功
修改SecondAbility中的預設message
@State message: string = 'SecondAbility'
到這兒我們的第二步就算完成了
由于我們啟動的是本地的FA,後邊為了差別啟動遠端FA,是以我們需要對檔案進行一個重命名,這樣友善我們認識。
我們點選MainAbility‘中的index.ets,右擊進行重命名
完成以上的步驟,編輯器會幫助我們對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:頁面名稱,注意包名
然後我們在DATU20運作
發現可以跳轉,那麼我們就實作了這個功能
跨裝置啟動FA
接下來我們看一下如何啟動遠端的deviceId
在這之前,我們需要做的事就是,在config.json配置權限
非敏感權限在這兒定義就好,如果是敏感權限,就要在運作時發送彈窗的形式去處理。
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC"
}
]
遠端啟動注意點:
//裝置管理器
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<string> = ["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<string> = []
//周遊權限是否通過
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%')
}
}