この記事では、Hongmeng分散スケジューリングを素早く理解し、データベース関連のアプリケーションを開発する方法を説明します。

この記事では、Hongmeng分散スケジューリングを素早く理解し、データベース関連のアプリケーションを開発する方法を説明します。

[[389002]]

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

1. はじめに

開発者は、分散スケジューリング機能をアプリケーションに統合し、指定された機能の分散インターフェイスを呼び出すことによって、デバイス間の機能スケジューリングを実装します。分散タスク スケジューリングでは、アビリティ テンプレートとインテントに応じて、リモート FA の開始 (Feature Ability)、リモート PA の開始 (Particle Ability)、リモート PA のシャットダウン、リモート PA の接続、リモート PA の切断、および FA のデバイス間移行という 6 つの機能が開発者に提供されます。分散タスク スケジューリングの詳細については、「分散タスク スケジューリング」を参照してください。

🕮 説明

FA をリモートで起動するには、少なくとも 2 つのデバイスが同じ分散ネットワーク内にある必要があります。これは次の操作によって実現できます。

1. すべてのデバイスが同じネットワークに接続されています。

2. すべてのデバイスで同じ Huawei アカウントにログインします。

3. すべてのデバイスで、「設定 -> その他の接続 -> 複数デバイスのコラボレーション」をオンにします。

このチュートリアルでは、「分散スケジューリングに基づく FA のリモート起動」を例に、許可申請、ボタンイベント応答、デバイスリストの取得、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. モジュール": {
  2. ......
  3. 「必要な権限」 : [
  4. {
  5. 「名前」 : 「ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE」   
  6. },
  7. {
  8. 「名前」 : 「ohos.permission.GET_DISTRIBUTED_DEVICE_INFO」   
  9. },
  10. {
  11. 「名前」 : 「ohos.permission.GET_BUNDLE_INFO」   
  12. },
  13. {
  14. 「名前」 : 「ohos.permission.DISTRIBUTED_DATASYNC」   
  15. }
  16. ]
  17. }

さらに、アビリティを実装するコードで、マルチデバイスの共同アクセスを使用する権限を明示的に宣言する必要もあります。サンプルコードは次のとおりです。

  1. パブリッククラスMainAbilityはAbilityを拡張します{
  2. @オーバーライド
  3. パブリックvoid onStart(インテント インテント) {
  4. requestPermissionsFromUser(新しい文字列[]{ "ohos.permission.DISTRIBUTED_DATASYNC" },0);
  5. super.onStart(インテント);
  6. }
  7. }

3. クリックイベントに応答するボタンを実装する

MainAbilitySlice.java でページを開発し、そのページにボタンを描画します。サンプルコードは次のとおりです。

  1. @オーバーライド
  2. パブリックvoid onStart(インテント インテント) {
  3. super.onStart(インテント);
  4. DirectionalLayout レイアウト = 新しい DirectionalLayout(this);
  5. ComponentContainer.LayoutConfig config = 新しいComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,
  6. ComponentContainer.LayoutConfig.MATCH_PARENT);
  7. レイアウトを設定します。
  8. ボタン btn = new Button(getContext());
  9. ShapeElement buttonBg = 新しい ShapeElement();
  10. ボタンの背景色をRgbColorに設定します(新しいRgbColor(0, 125, 255));
  11. ボタンの背景のコーナー半径を設定します(25);
  12. btn.setBackground(ボタンの背景);
  13. ComponentContainer.LayoutConfig btnConfig = 新しい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( "リモートFAを開始" );
  19. レイアウトにコンポーネントを追加します(btn);
  20. btn.setClickedListener(コンポーネント -> {
  21. // ボタンの応答を処理します。詳細については、手順 3「デバイス リストを取得する」を参照してください。
  22. });
  23. super.setUIContent(レイアウト);
  24. }

4. デバイスリストを取得する

リモートスタートFAボタンの応答で、デバイスリストが取得されます。 DeviceManager.getDeviceList(int flag) はデバイス リストを取得するために使用されます。このフラグは DeviceInfo.FLAG_GET_ONLINE_DEVICE に渡され、分散ネットワーク内のすべてのオンライン デバイスを照会します。返された DeviceInfo リスト オブジェクトを解析することで、リモート起動する FA デバイスの deviceId が取得されます。サンプルコードは次のとおりです。

  1. btn.setClickedListener(コンポーネント -> {
  2. // ボタンの応答を処理し、オンラインデバイスのリストを取得します
  3. リスト<デバイス情報> deviceInfoList =
  4. DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
  5. (デバイス情報デバイス情報:デバイス情報リスト) {
  6. // FA をリモートで開始します。詳細については手順 4 を参照してください。
  7. }
  8. });

5. FAをリモートで起動する

FA をリモートで起動するための Intent を構築し、FA をリモートで起動します。 BUNDLE_NAME と ABILITY_NAME はグローバル変数であり、起動する必要があるリモート FA の BundleName (パッケージ名) と AbilityName (起動するアビリティ名) を示します。サンプルコードは次のとおりです。

  1. // FAをリモートで起動する
  2. インテント remoteIntent = 新しい Intent();
  3. //開始するFAのbundleNameとabilityNameを指定します
  4. // 例: BUNDLE_NAME = "com.huawei.codelab"   
  5. // ABILITY_NAME = "com.huawei.codelab.MainAbility"   
  6. // 現在の分散機能が関係していることを示すために分散フラグを設定します
  7. 操作 operation = new Intent.OperationBuilder().withDeviceId(deviceInfo.getDeviceId())
  8. .withBundleName(バンドル名)
  9. .withAbilityName(アビリティ名)
  10. .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
  11. 。建てる();
  12. リモートインテントの操作を設定します。
  13. 試す {
  14. // ターゲットデバイスに指定されたFAが含まれているかどうか
  15. リスト<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(remoteIntent, 0, 0);
  16. (abilityInfoList != null && !abilityInfoList.isEmpty())の場合 {
  17. リモートインテントを開始します。
  18. }
  19. } キャッチ (RemoteException e) {
  20. // 例外を処理する
  21. }

6. 完全な例

携帯電話を例にとると、ページ ボタンをクリックすると、同じ Huawei アカウントでログインしている同じネットワーク内の他の携帯電話で指定された FA が表示されます。ここでの確認には少なくとも 2 台の携帯電話が必要です。効果は以下のとおりです。

サンプルコードは次のとおりです。

  1. ohos.aafwk.ability.AbilitySlice をインポートします。
  2. ohos.aafwk.content.Intent をインポートします。
  3. ohos.aafwk.content.Operation をインポートします。
  4. ohos.agp.colors.RgbColor をインポートします。
  5. ohos.agp.components.Button をインポートします。
  6. ohos.agp.components.ComponentContainer をインポートします。
  7. ohos.agp.components.DirectionalLayout をインポートします。
  8. ohos.agp.components.element.ShapeElement をインポートします。
  9. ohos.bundle.AbilityInfo をインポートします。
  10. ohos.distributedschedule.interwork.DeviceInfo をインポートします。
  11. ohos.distributedschedule.interwork.DeviceManager をインポートします。
  12. ohos.rpc.RemoteException をインポートします。
  13.   
  14. java.util.List をインポートします。
  15.   
  16. パブリッククラス MainAbilitySlice は AbilitySlice を拡張します {
  17. //リモートで起動したFAのBundleName。自分で入力してください
  18. プライベート静的最終文字列 BUNDLE_NAME = "com.huawei.codelab" ;
  19. // FAをリモート起動するためのAbilityName。自分で入力してください
  20. プライベート静的最終文字列 ABILITY_NAME = "com.huawei.codelab.MainAbility" ;
  21.   
  22. @オーバーライド
  23. パブリックvoid onStart(インテント インテント) {
  24. super.onStart(インテント);
  25. DirectionalLayout レイアウト = 新しい DirectionalLayout(this);
  26. ComponentContainer.LayoutConfig config = 新しいComponentContainer.LayoutConfig(
  27. ComponentContainer.LayoutConfig.MATCH_PARENT、
  28. ComponentContainer.LayoutConfig.MATCH_PARENT);
  29. レイアウトを設定します。
  30. ボタン btn = new Button(getContext());
  31. ShapeElement buttonBg = 新しい ShapeElement();
  32. ボタンの背景色をRgbColorに設定します(新しいRgbColor(0, 125, 255));
  33. ボタンの背景のコーナー半径を設定します(25);
  34. btn.setBackground(ボタンの背景);
  35. ComponentContainer.LayoutConfig btnConfig = 新しい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( "リモートFAを開始" );
  42. レイアウトにコンポーネントを追加します。
  43. btn.setClickedListener(コンポーネント -> {
  44. // ボタンの応答を処理し、オンラインデバイスのリストを取得します
  45. リスト<DeviceInfo> deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
  46. (デバイス情報デバイス情報:デバイス情報リスト) {
  47. // FAをリモートで起動する
  48. インテント remoteIntent = 新しい Intent();
  49. 操作 operation = new Intent.OperationBuilder()
  50. .withDeviceId(デバイス情報.getDeviceId())
  51. .withBundleName(バンドル名)
  52. .withAbilityName(アビリティ名)
  53. .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
  54. 。建てる();
  55. リモートインテントの操作を設定します。
  56. 試す {
  57. リスト<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(remoteIntent, 0, 0);
  58. (abilityInfoList != null && !abilityInfoList.isEmpty())の場合 {
  59. リモートインテントを開始します。
  60. }
  61. } キャッチ (RemoteException e) {
  62. // 例外を処理する
  63. }
  64. }
  65. });
  66. super.setUIContent(レイアウト);
  67. }
  68. }

🕮 説明

上記のコードはデモの参考用です。製品コードでは、データの検証と国際化を考慮する必要があります。

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

<<:  パブリッククラウドからソフトウェア定義データセンターまで、マイクロソフトがハイブリッドクラウド攻勢を開始

>>:  クラウドネイティブマイクロサービスの実装を加速する方法: Baidu CRM の取り組み

推薦する

オートホーム:4億5000万元の利益を生んだメディア変革の道

ナンドゥのイラスト2013年12月11日、ニューヨーク証券取引所でベルが鳴るとともに、設立されて間も...

Googleの検索オートコンプリート機能が行き詰まり、名誉毀損的な候補が含まれていると非難される

今年5月中旬、ドイツのカールスルーエにあるドイツ連邦裁判所は、Google検索の「オートコンプリート...

ウェブマスターの観点から見た 360 Search、Baidu、Google の比較

360 Search は数日間「ひっそりと」オンラインになっており、当初のシンプルなページから現在の...

英語の文字を含む大文字と小文字のキーワードの違い

細部が成功と失敗を決めると言われますが、SEO にも同じことが当てはまります。今では、このことを深く...

2021 年にビジネス回復を促進する 3 つのテクノロジーとクラウド コンピューティングのトレンド

多くの組織は現在、事業開発において重要な局面を迎えています。国際通貨基金(IMF)の推計によると、2...

ウェブマスターがよく話す2つの小さな問題を解決する

正直に言うと、SEO 最適化の内容は書き尽くされ、どれも同じような内容ばかりです。今後は、いくつかの...

ウェブマスターとそのウェブサイトに対するチンピラの見解

私は作家です。1日平均2万~3万語をタイプします。内容は多岐にわたり、ダイエットのヒントからゲーム戦...

不正確なキーワードが原因でランキングが上がらないウェブサイトを救うために適切な対策を講じる

ウェブサイトの立ち上げから開発中まで、人為的要因の影響により、ウェブサイトの一部のキーワードがランキ...

クラウドへの移行を成功させるための 6 つの戦略

移行戦略の選択は、組織が何を達成したいかによって大きく異なります。いくつかのアプローチは多くの戦略的...

ルー・ソンソン:価格比較サイトでの初めての買い物体験

お気に入りで「価格を比較」をクリックすると、さまざまなショッピングモールの550Dの価格が出てきまし...

競合他社を分析してウェブサイトのランキングを向上させる方法

SEO で成功したいなら、競合相手の分析方法を学ばなければなりません。自分自身と敵を知ることで、あら...

justg: 500M 帯域幅「3 つのネットワーク」 - 「南アフリカ cn2 gia vps」簡単な評価

justg は以前、100M 帯域幅の VPS を宣伝していました。そのときの特別価格は年間 19....

ウールとギャング:インターネット クラウドソーシングをファッションに導入

「編み物」といえば、多くの人は次のような光景を思い浮かべるでしょう。庭のロッキングチェアに座り、老眼...

Goを使用してXA分散トランザクションを簡単に完了する、ナニーレベルのチュートリアル

[[423848]]取引一部のビジネス要件では、一連の操作の一部ではなく、すべてを実行する必要があり...

人気イベントをオンラインプロモーションに活用する方法

優れた SEO 担当者になりたいのであれば、物事に対する強い感受性と分析力、特にホットな出来事に対す...