成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文教你快速了解鴻蒙分布式調度并開發數據庫相關應用

開發 分布式
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[389002]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 1. 介紹

開發者在應用中集成分布式調度能力,通過調用指定能力的分布式接口,實現跨設備能力調度。根據Ability模板及意圖的不同,分布式任務調度向開發者提供六種能力:啟動遠程FA(Feature Ability)、啟動遠程PA(Particle Ability)、關閉遠程PA、連接遠程PA、斷開連接遠程PA和FA跨設備遷移。分布式任務調度的詳細介紹可以參考分布式任務調度。

🕮 說明

實現遠程啟動FA,需要至少兩個設備處于同一個分布式網絡中,可以通過如下操作實現:

1. 所有設備接入同一網絡;

2. 所有設備登錄相同華為帳號;

3. 所有設備上開啟"設置->更多連接->多設備協同 "。

本教程以"基于分布式調度遠程啟動FA"為例,結合權限申請、Button事件響應、獲取設備列表、遠程啟動FA的開發過程,讓您快速了解分布式調度能力。

2. 申請所需要的權限

在entry\src\main\config.json中申請以下4個權限:

1. ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允許監聽分布式組網內的設備狀態變化。

2. ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允許獲取分布式組網內的設備列表和設備信息。

3. ohos.permission.GET_BUNDLE_INFO:用于查詢其他應用的信息。

4. ohos.permission.DISTRIBUTED_DATASYNC:用于允許不同設備間的數據交換。

示例代碼如下:

  1. module": {  
  2. ......  
  3.    "reqPermissions": [  
  4.     {  
  5.        "name""ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"  
  6.      },  
  7.      {  
  8.        "name""ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"  
  9.      },  
  10.      {  
  11.        "name""ohos.permission.GET_BUNDLE_INFO"  
  12.      },  
  13.      {  
  14.        "name""ohos.permission.DISTRIBUTED_DATASYNC"  
  15.      }  
  16.   ]  

此外,還需要在實現Ability的代碼中顯式聲明需要使用多設備協同訪問的權限,示例代碼如下:

  1. public class MainAbility extends Ability {  
  2. @Override  
  3. public void onStart(Intent intent) {  
  4.     requestPermissionsFromUser(new String[]{"ohos.permission.DISTRIBUTED_DATASYNC"},0);  
  5.     super.onStart(intent);   
  6.   }  

3. 實現一個Button,響應點擊事件

在MainAbilitySlice.java中開發一個頁面,并在頁面上繪制一個Button,示例代碼如下:

  1. @Override  
  2. public void onStart(Intent intent) {  
  3.     super.onStart(intent);  
  4.     DirectionalLayout layout = new DirectionalLayout(this);  
  5.     ComponentContainer.LayoutConfig config = new ComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,   
  6.         ComponentContainer.LayoutConfig.MATCH_PARENT);  
  7.     layout.setLayoutConfig(config);  
  8.     Button btn = new Button(getContext());  
  9.     ShapeElement buttonBg = new ShapeElement();  
  10.     buttonBg.setRgbColor(new RgbColor(0, 125, 255));  
  11.     buttonBg.setCornerRadius(25);  
  12.     btn.setBackground(buttonBg);  
  13.     ComponentContainer.LayoutConfig btnConfig = new ComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,   
  14.         ComponentContainer.LayoutConfig.MATCH_CONTENT);  
  15.     btn.setLayoutConfig(btnConfig);  
  16.     btn.setTextSize(50);  
  17.     btn.setPadding(10, 10, 10, 10);  
  18.     btn.setText("Start Remote FA");  
  19.     layout.addComponent(btn);  
  20.     btn.setClickedListener(component -> {  
  21.        // 處理按鈕響應,詳情請見第3步,獲取設備列表。  
  22.     });  
  23.     super.setUIContent(layout);  

4. 獲取設備列表

在遠程啟動FA按鈕的響應里面實現設備列表的獲取,使用DeviceManager.getDeviceList(int flag)獲取設備列表,flag通過傳入DeviceInfo.FLAG_GET_ONLINE_DEVICE查詢所有分布式網絡中的在線設備,通過解析返回的DeviceInfo列表對象,獲取待被遠程啟動的FA的設備的deviceId。示例代碼如下:

  1. btn.setClickedListener(component -> {  
  2. // 處理按鈕響應,獲取在線設備列表       
  3. List<DeviceInfo> deviceInfoList =   
  4. DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);  
  5.     for (DeviceInfo deviceInfo : deviceInfoList) {   
  6.         // 遠程啟動FA,詳情請見第4步  
  7.     }  
  8. }); 

5. 遠程啟動FA

構建用于遠程啟動FA的Intent,并遠程啟動FA。其中的BUNDLE_NAME和ABILITY_NAME為全局變量,表示需要啟動的遠程FA的BundleName(包名稱)和AbilityName(待啟動的Ability名稱)。示例代碼如下:

  1. // 遠程啟動FA  
  2. Intent remoteIntent = new Intent();  
  3. // 指定待啟動FA的bundleName和abilityName  
  4. // 例如:BUNDLE_NAME = "com.huawei.codelab"  
  5. //       ABILITY_NAME = "com.huawei.codelab.MainAbility"  
  6. // 設置分布式標記,表明當前涉及分布式能力  
  7. Operation operation = new Intent.OperationBuilder().withDeviceId(deviceInfo.getDeviceId())  
  8.     .withBundleName(BUNDLE_NAME)  
  9.     .withAbilityName(ABILITY_NAME)  
  10.     .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)  
  11.     .build();  
  12. remoteIntent.setOperation(operation);  
  13. try {  
  14.     // 目標設備是否包含指定FA  
  15.     List<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(remoteIntent, 0, 0);  
  16.     if (abilityInfoList != null && !abilityInfoList.isEmpty()) {  
  17.         startAbility(remoteIntent);  
  18.     }  
  19. } catch (RemoteException e) {  
  20.     // 處理異常  

6. 完整示例

以手機為例,點擊頁面按鈕,會拉起同一網絡中的其余使用同一華為帳號登錄的手機上的指定FA,此處需要至少兩臺手機進行驗證。實現效果如下:

示例代碼如下:

  1. import ohos.aafwk.ability.AbilitySlice;  
  2. import ohos.aafwk.content.Intent;  
  3. import ohos.aafwk.content.Operation;  
  4. import ohos.agp.colors.RgbColor;  
  5. import ohos.agp.components.Button;  
  6. import ohos.agp.components.ComponentContainer;  
  7. import ohos.agp.components.DirectionalLayout;  
  8. import ohos.agp.components.element.ShapeElement;  
  9. import ohos.bundle.AbilityInfo;  
  10. import ohos.distributedschedule.interwork.DeviceInfo;  
  11. import ohos.distributedschedule.interwork.DeviceManager;  
  12. import ohos.rpc.RemoteException;  
  13.   
  14. import java.util.List;  
  15.   
  16. public class MainAbilitySlice extends AbilitySlice {  
  17.     //遠程啟動FA的BundleName ,請自行填寫  
  18.     private static final String BUNDLE_NAME = "com.huawei.codelab";  
  19.     // 遠程啟動FA的AbilityName,請自行填寫  
  20.     private static final String ABILITY_NAME = "com.huawei.codelab.MainAbility";  
  21.   
  22.     @Override  
  23.     public void onStart(Intent intent) {  
  24.         super.onStart(intent);  
  25.         DirectionalLayout layout = new DirectionalLayout(this);  
  26.         ComponentContainer.LayoutConfig config = new ComponentContainer.LayoutConfig(  
  27.             ComponentContainer.LayoutConfig.MATCH_PARENT,   
  28.             ComponentContainer.LayoutConfig.MATCH_PARENT);  
  29.         layout.setLayoutConfig(config);  
  30.         Button btn = new Button(getContext());  
  31.         ShapeElement buttonBg = new ShapeElement();  
  32.         buttonBg.setRgbColor(new RgbColor(0, 125, 255));  
  33.         buttonBg.setCornerRadius(25);  
  34.         btn.setBackground(buttonBg);  
  35.         ComponentContainer.LayoutConfig btnConfig = new ComponentContainer.LayoutConfig(  
  36.             ComponentContainer.LayoutConfig.MATCH_PARENT,   
  37.             ComponentContainer.LayoutConfig.MATCH_CONTENT);  
  38.         btn.setLayoutConfig(btnConfig);  
  39.         btn.setTextSize(50);  
  40.         btn.setPadding(10, 10, 10, 10);  
  41.         btn.setText("Start Remote FA");  
  42.         layout.addComponent(btn);  
  43.         btn.setClickedListener(component -> {  
  44.             // 處理按鈕響應,獲取在線設備列  
  45.             List<DeviceInfo> deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);  
  46.             for (DeviceInfo deviceInfo : deviceInfoList) {  
  47.                 // 遠程啟動FA  
  48.                 Intent remoteIntent = new Intent();  
  49.                 Operation operation = new Intent.OperationBuilder()  
  50.                     .withDeviceId(deviceInfo.getDeviceId())  
  51.                     .withBundleName(BUNDLE_NAME)  
  52.                     .withAbilityName(ABILITY_NAME)  
  53.                     .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)  
  54.                     .build();  
  55.                 remoteIntent.setOperation(operation);  
  56.                 try {  
  57.                     List<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(remoteIntent, 0, 0);  
  58.                     if (abilityInfoList != null && !abilityInfoList.isEmpty()) {  
  59.                         startAbility(remoteIntent);  
  60.                     }  
  61.                 } catch (RemoteException e) {  
  62.                     // 處理異常  
  63.                 }  
  64.             }  
  65.         });  
  66.         super.setUIContent(layout);  
  67.     }  

🕮 說明

以上代碼僅demo演示參考使用,產品化的代碼需要考慮數據校驗和國際化。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-02-20 09:56:28

TCPIP網絡協議

2023-07-31 21:56:54

哨兵系統redis

2025-05-30 01:00:00

RAG大模型流程

2020-04-14 11:14:02

PostgreSQL分布式數據庫

2020-12-22 10:02:53

ZabbixMySQL數據庫

2022-12-21 08:40:05

限流器分布式限流

2017-09-04 14:46:10

分布式事務問題

2016-10-25 14:35:05

分布式系統 存儲

2022-07-28 09:02:41

文件存儲系統

2020-01-03 09:00:00

數據庫數據庫管理金融

2020-10-28 11:15:24

EPaxos分布式性算法

2023-12-27 07:40:43

HTTP服務器負載均衡

2019-07-23 07:30:16

2021-08-16 09:55:41

鴻蒙HarmonyOS應用

2023-05-11 08:26:56

2019-08-07 10:44:28

MySQLGoogle

2022-07-13 09:53:58

分布式開發

2022-09-05 07:32:46

mock數據Stream

2024-12-19 15:00:00

數據清洗Python

2021-12-07 06:02:15

Redis Docker運維
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人免费观看 | аⅴ资源新版在线天堂 | 青青草原综合久久大伊人精品 | 在线不卡视频 | 欧美一区二区三区在线观看视频 | 精品综合久久久 | 国产乱码精品一区二三赶尸艳谈 | 人操人免费视频 | 国产在线精品一区二区 | 久久中文字幕一区 | 精品伦精品一区二区三区视频 | 色一级 | 免费亚洲成人 | 婷婷久久综合 | 亚洲一区中文 | 亚洲福利在线视频 | 国产一区二区三区 | 日韩国产精品一区二区三区 | 欧美视频福利 | 欧美亚洲高清 | 成人日韩精品 | 亚洲国产精品99久久久久久久久 | 日韩久久久久久 | 一级欧美日韩 | 中文字字幕一区二区三区四区五区 | 欧美日韩成人在线 | 欧美激情在线精品一区二区三区 | 国产欧美精品一区二区色综合朱莉 | 久久国产精品一区二区三区 | 精品久久久久久久人人人人传媒 | 久久久久久综合 | 性一交一乱一透一a级 | 国产在线精品一区 | 亚洲精品在线看 | 亚洲精品一区二区在线观看 | 一区二区三区四区免费在线观看 | 精品一二三 | 久久综合爱 | 中文字幕一区在线观看视频 | 日本超碰 | 日韩在线观看中文字幕 |