Hongmengの​​分散コンピューティングを使用して七夕祭りを支援します

Hongmengの​​分散コンピューティングを使用して七夕祭りを支援します

[[418672]]

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

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

https://harmonyos..com

バレンタインデー以降、これまでのBステーションカード企画に隠し機能が追加されます。最新の B ステーション サービス カードにアップグレードした場合、デスクトップにアバター カードを追加するときに、アバターをクリックするだけで、下の図のような効果が表示されます。 Hongmeng の分散機能を適用する小さな機能。

動画プレビューアドレス: https://harmonyos..com/show/7762

完全なプロジェクトアドレス: https://gitee.com/liangzili/bilibili-cards

1. プレイページを追加する

たとえば、PlayerSlice の場合、このページはビデオを再生するために使用されます。


2. アバターカードにクリックイベントを追加する

カード上のアバターをクリックするとページがジャンプします。コードは次のとおりです

src/main/js/fans/pages/index/index.hml

  1. <div クラス = "card_root_layout"  そうでなければ>
  2. <div クラス = "div_left_container" >
  3. <stack class= "stack-parent" onclick= "sendRouterEvent" >
  4. <画像 src= "{{src}}"クラス= "image_src" ></画像>
  5. <画像 src= "{{vip}}"クラス= "image_vip" ></画像>
  6. </スタック>
  7. </div>
  8. <text class= "item_title" >{{フォロワー}}</text>
  9. </div>

新しく作成された再生ページにジャンプするアクションを設定します。

src/main/js/fans/pages/index/index.json

  1. 「アクション」 : {
  2. 「ルーターイベントを送信」 : {
  3. 「アクション」 「ルーター」
  4. "abilityName" : "com.liangzili.demos.Player"
  5. "パラメータ" : true  
  6. }
  7. }

3.再生ページでプルアップ方法を決定する

インテントからパラメータ params を抽出します。サービス カードによって再生ページが開かれた場合、結果は true になります。分散プルアップの場合は false になります。

  1. パラメータ = intent.getStringParam( "パラメータ" ); // インテントからジャンプイベントで定義された params フィールドの値を取得します
  2. (パラメータが「真」の場合){
  3. インテントintent0 = 新しいIntent();
  4. 操作 op = new Intent.OperationBuilder()
  5. .withDeviceId(DistributedUtils.getDeviceId()) //パラメータ1。デバイスをまたぐかどうか、空、デバイスをまたがない
  6. .withBundleName( "com.liangzili.demos" ) //パラメータ 2. config.json の bundleName
  7. .withAbilityName( "com.liangzili.demos.Player" ) //パラメータ3. ジャンプ先のアビリティ名
  8. .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
  9. 。建てる();
  10. オペレーションを設定します。
  11. intent0.setParam( "params" , "false" );
  12. 開始アビリティ(intent0);
  13. ビデオソース = "resources/base/media/right.mp4" ;
  14. }それ以外{
  15. ビデオソース = "resources/base/media/left.mp4" ;
  16. }

4. 分散プルアップページの権限を申請する

params が分散プルアップページを呼び出す場合は、事前にアプリケーションの権限を取得する必要があります。

アプリを初めて起動するときに、分散権限を取得するようにユーザーに通知します。

src/main/java/com/liangzili/demos/MainAbility.java

  1. requestPermissionsFromUser(新しい文字列[]{ "ohos.permission.DISTRIBUTED_DATASYNC" },0);

5. リモートデバイスIDを取得する

リモート デバイスでページを開くには、まずデバイス ID を取得する必要があります。

  1. パブリッククラスDistributedUtils {
  2. 公共 静的文字列 getDeviceId(){
  3. //オンラインデバイスのリストを取得します。 getDeviceList によって取得されたデバイスにはこのデバイスは含まれません。
  4. リスト<DeviceInfo> deviceList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
  5. デバイスリストが空の場合
  6. 戻る ヌル;
  7. }
  8. intデバイス番号 = デバイスリスト。サイズ();
  9. リスト<文字列> deviceIds = 新しいArrayList<>(deviceNum); //デバイスIDを抽出
  10. リスト<文字列> deviceNames = 新しいArrayList<>(deviceNum); //デバイス名を抽出
  11. デバイスリスト.forEach((デバイス)->{
  12. デバイス ID を追加します(デバイス ID を取得します)。
  13. デバイス名を追加します(デバイス.getDeviceName());
  14. });
  15.  
  16. 文字列 devcieIdStr = deviceIds.get(0);
  17. devcieIdStrを返します
  18. }
  19. }

6. ビデオを再生するためのリソースアドレスを取得する

ビデオ再生は、iSoftStone HarmonyOS Academy の新年挨拶ビデオ コードを参照します。公式デモとCadeLabsはまだ実行されておらず、少し遅すぎるため、大きなセクションをコピーしていることをお許しください。

  1. //没入型ステータスバーを設定する
  2. getWindow().addFlags(WindowManager.LayoutConfig.MARK_TRANSLUCENT_STATUS);
  3. プレイヤーを初期化します。
  4.  
  5. // 2 つのコールバックを書き直す必要があります: VideoSurfaceCallback、VideoPlayerCallback
  6. プライベートvoid initPlayer() {
  7. sfProvider=(SurfaceProvider) リソーステーブル Id_surfaceProvider でコンポーネント ID を検索します。
  8. // image=(画像) findComponentById(ResourceTable.Id_img);
  9. sfProvider.getSurfaceOps().get().addCallback(新しい VideoSurfaceCallback());
  10. // sfProvider.pinToZTop(boolean) --true に設定すると、ビデオ コントロールが最上位レイヤーに表示されますが、false に設定すると、最上位レイヤーには表示されず、黒い画面が表示されます。  
  11. // 次のコード行を追加する必要があります: WindowManager.getInstance().getTopWindow().get().setTransparent( true );
  12. sfProvider.pinToZTop( true );
  13. //WindowManager.getInstance().getTopWindow().get().setTransparent( true );
  14. プレイヤー=新しいプレイヤー(getContext());
  15. //sfProvider リスナーイベントを追加
  16. sfProvider.setClickedListener(新しいComponent.ClickedListener() {
  17. @オーバーライド
  18. パブリックvoid onClick(コンポーネント コンポーネント) {
  19. プレイヤーが現在再生中の場合
  20. // 再生中の場合は一時停止します
  21. プレーヤーを一時停止します。
  22. // 再生ボタンが表示されます
  23. コンポーネントの可視性を VISIBLE に設定します。
  24. }それ以外{
  25. //一時停止している場合はクリックして再生を続行します
  26. プレイヤーを再生します。
  27. //再生ボタンを非表示にする
  28. イメージの可視性を Component.HIDE に設定します。
  29. }
  30. }
  31. });
  32. }
  33. プライベートクラス VideoSurfaceCallback は SurfaceOps.Callback を実装します {
  34. @オーバーライド
  35. パブリックvoid サーフェスが作成されました (サーフェスオペレーション サーフェスオペレーション) {
  36. HiLog.info(logLabel, "surfaceCreated() が呼び出されました。" );
  37. sfProvider.getSurfaceOps().isPresent() の場合 {
  38. サーフェス サーフェス = sfProvider.getSurfaceOps().get().getSurface();
  39. ローカルファイルを再生します(サーフェス)。
  40. }
  41. }
  42. @オーバーライド
  43. パブリックvoid 表面が変更されました (SurfaceOps 表面Ops、 int i、 int i1、 int i2) {
  44. HiLog.info(logLabel, "surfaceChanged() が呼び出されました。" );
  45. }
  46. @オーバーライド
  47. パブリックvoid 表面を破棄します(SurfaceOps 表面Ops) {
  48. HiLog.info(logLabel, "surfaceDestroyed() が呼び出されました。" );
  49. }
  50. }
  51. プライベートvoid playLocalFile(サーフェスサーフェス) {
  52. 試す {
  53. RawFileDescriptor filDescriptor = getResourceManager().getRawFileEntry(videoSource).openRawFileDescriptor();
  54. ソースソース = new Source(filDescriptor.getFileDescriptor(),filDescriptor.getStartPosition(),filDescriptor.getFileSize());
  55. player.setSource(ソース);
  56. プレーヤーのビデオサーフェスを設定します。
  57. player.setPlayerCallback(新しいVideoPlayerCallback());
  58. player.prepare ();
  59. sfProvider.setTop(0);
  60. プレイヤーを再生します。
  61. } キャッチ (例外 e) {
  62. HiLog.info(logLabel, "playUrl 例外:" + e.getMessage());
  63. }
  64. }

参考記事:

[Softcom] SurfaceProvider がビデオ再生デモを実装 - 温かい新年の挨拶ビデオ - Hongmeng HarmonyOS 技術コミュニティ - Hongmeng 公式パートナー - 51CTO.COM

Hongmeng アプリケーション開発入門 (VI): ページ間の移動 - Hongmeng HarmonyOS テクノロジー コミュニティ - Hongmeng 公式パートナー - 51CTO.CO

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

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

https://harmonyos..com

<<:  SAPと永泰生物科技が共同でデジタル運用管理プラットフォームを構築し、デジタルパワーでがんと闘う

>>:  エッジコンピューティングストレージはIoTの次のフロンティア

推薦する

VMware が Gartner の統合エンドポイント管理マジック クアドラントで 4 年連続リーダーに選出

VMware は最近、ガートナー社の「2021 年統合エンドポイント管理 (UEM) マジック クア...

123systems-256MメモリVPSの年間支払いが10ドルのお買い得価格、さらにセール中

123systems は、低価格の openvz vps を非常に手頃な価格で販売しています。Hos...

SEOも違う

山を正面から見ると山頂が見えます。SEOも同じです!警察は赤警察と黒警察に分かれていますが、SEOも...

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

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

コラボレーションオフィスSKYCC複合マーケティングソフトウェアと通常のマーケティングソフトウェアのどちらが優れていますか?

インターネットの急速な発展に伴い、ますます多くの企業がオンライン マーケティング業界に参入し、さまざ...

ライジングスター:新規サイトの初期段階での反撃を成功させる方法の簡単な分析

ある程度の経験を持つ SEO 担当者は、新しいサイトの最適化と古いサイトの最適化には大きな違いがある...

SEO 業界のボトルネックに春が訪れるのはいつでしょうか?

みなさんこんにちは。謝凱です。このタイトルを見ると、多くの人が同じように感じるかもしれません。SEO...

SpringbootはKafka Streamのリアルタイム統計を統合します

[[417927]]環境: springboot2.3.12.RELEASE + kafka_2.1...

あなたの独立系外国貿易モールがうまくいっていないのはなぜですか?

対外貿易B2Cモールには、プラットフォーム型モールと自社構築型モールの2種類があります。プラットフォ...

HostGa の「言葉では言い表せない」ドメイン名登録は 4.95 ドル (何年でも登録可能)

HostGa は「言葉では言い表せない」最新のプロモーション情報をリリースしました: COM/.NE...

テンセントクラウドテクノハブテクノロジーツアー武漢駅を1つの記事で、クラウドネイティブの世界を深く解釈

[51CTO.com からのオリジナル記事] クラウド コンピューティング テクノロジーの開発は、2...

Vipshopの血なまぐさいIPOは冷ややかな反応に見舞われた。電子商取引は依然として資本の冬に立ち向かう必要がある

トレイシーブランドディスカウントB2C企業Vipshopは、発行価格が23%引き下げられ、6.5ドル...

クラウド ネイティブ エコシステムをナビゲートするための CTO ガイド

コンテナとクラウド コンピューティングのテクノロジが成熟する一方で、企業の CTO は、すべてがスム...

最適化共有:「TF-IDF」アルゴリズムの概念とSEOへの応用

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています私は以前か...

モバイルインターネットのポジショニング戦争:Baidu が最も危険、最後に生き残るのは 1 社だけか?

中国の国内インターネット業界の大手企業と「同盟」の間の争いが激化している。昨日、アリババが新浪微博に...