この記事では、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 の取り組み

推薦する

倒産の波の後、共同購入業界は2度目の再編に直面している。地域密着型サービスが競争力の核心

電子商取引企業間の価格競争は熾烈を極めているが、同じく電子商取引モデルである共同購入業界は意外にも地...

ウェブサイトのランキング最適化: チャンネルページの最適化

チャンネル ページの最適化について言えば、これは実際には軽視できないものです。これは、Web サイト...

Pulsar の展開とオンライン構成を 1 つの記事で学ぶ

1. パルサーのインストールと展開1. インストールパッケージをダウンロードするPulsar インス...

映画O2O: 批評的にも商業的にも本当に成功できるのは誰か? 映画O2Oを行っている複数のウェブサイトの一覧

最近、陸振旺氏は「地方生活O2O産業競争力分析レポート」(以下、「地方O2Oレポート」)を発表しまし...

中国の小売電子商取引の旅 - あらゆる段階でため息

[各号に一文]: 多くの場合、速いことは遅いことであり、遅いことは速いことです。 ——アナリシス・イ...

権限が降格された SEO ブログの分析例

最近、私自身の個人ブログも大幅にダウングレードされました。キーワードランキングが一晩ですべてトップ1...

BandwagonHost の DC3 と DC8 の違いは何ですか? DC3 と DC8 のどちらが優れていますか?どうやって選ぶ?

多くの人は、CN2、特にDC3とDC8のどちらを選択すればよいかわかりません。DC3とDC8のどちら...

白洋製薬とオラクルがクラウド協力を強化し、製薬業界に新たな活力を注入

[51CTO.comからのオリジナル記事] 近年、ビッグデータ、クラウドコンピューティング、人工知能...

Docker の初心者村から始めますか?必要なのは次の11のルールです

多くの人は最終的に、問題を解決するために Docker を使用することを決定します。 Docker ...

gigsgigscloud: 米国 VPS、トリプルネットワーク CN2 GIA、月額 4.99 ドル、500g トラフィック、500Mbps 帯域幅

gigsgigscloud の CLOUDLET V シリーズ VPS (米国西海岸ロサンゼルス、ト...

友情リンクの核心はウェブサイト交換リンクと相互リンクにある

ほとんどのウェブマスターは、自分のサイトでリンク交換のプロセスを経験したことがあると思います。また、...

中国移動、実名登録のない携帯電話は停止されるという噂に反応

5月20日のInformation Timesの報道によると、あるネットユーザーがWeiboで、国の...

ウェブサイトの最適化には、真実かつ信頼できる

インターネットには真実と虚偽が多すぎます。検索市場はインターネットの最も本物の描写です。検索市場の検...

SEOは理想では成功するが、現実では失敗する

理想は満ち溢れているが、現実は乏しい! SEO 担当者の理想とは何でしょうか? SEO が直面してい...