色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

分享一個有趣的鴻蒙分布式小游戲

OpenHarmony技術社區(qū) ? 來源:鴻蒙技術社區(qū) ? 作者:維京戰(zhàn)斧 ? 2021-11-01 14:29 ? 次閱讀

今天給大家分享一個有趣的鴻蒙分布式小游戲:你畫我猜。

開發(fā)心得(如有錯誤還請大佬及時指正):

  • 分布式流轉:一個 APP 應用在設備之間互相拉起遷移,只在一個終端上運行。

  • 分布式協(xié)同:一個 APP 同時在多個設備上運行,畫面實時共享,數(shù)據(jù)實時傳輸。

在工程創(chuàng)立之后,首先有個很重要的事情那就是驗權。

①這個分布式協(xié)同會用到一個權限接口,去 MainAbilitySlice 里面申請

分布式數(shù)據(jù)管理 ohos.permission.DISTRIBUTED_DATASYNC 允許不同設備間的數(shù)據(jù)交換。
voidgrantPermission(){//獲取驗證權限數(shù)據(jù)交互允許不同設備間的數(shù)據(jù)交換。
if(verifySelfPermission(DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){
if(canRequestPermission(DISTRIBUTED_DATASYNC)){
requestPermissionsFromUser(newString[]{DISTRIBUTED_DATASYNC},PERMISSION_CODE);
}
}
}

權限接口文檔鏈接

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/security-permissions-available-0000001051089272

②權限申請

開發(fā)者需要在 config.json 文件中的“reqPermissions”字段中聲明所需要的權限。

{
"module":{
"reqPermissions":[
{
"name":"ohos.permission.CAMERA",
"reason":"$string:permreason_camera",
"usedScene":
{
"ability":["com.mycamera.Ability","com.mycamera.AbilityBackground"],
"when":"always"
}
},{
...
}
]
}
}
}

351c9594-3ac5-11ec-82a9-dac502259ad0.png
{
"name":"ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"//允許獲取分布式組網(wǎng)內(nèi)設備的狀態(tài)變化。
},
{
"name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"//允許獲取分布式組網(wǎng)內(nèi)的設備列表和設備信息。
},
{
"name":"ohos.permission.GRT_BUNDLE_INFO"//查詢其他應用的信息。
},
{
"name":"ohos.permission.INTERNET"//允許使用網(wǎng)絡socket。
}

應用權限列表文檔鏈接:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/security-permissions-guidelines-0000000000029886

再看頁面結構:

在 resources 下面的:
  • graphic:頁面樣式效果調(diào)配

  • layoput:此 demo 的 java UI 頁面布局結構

主頁面入口布局代碼 ability_main:



<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical"
ohos:background_element="$graphic:background_button">

<Text
ohos:height="match_content"
ohos:width="match_content"
ohos:top_margin="150px"
ohos:layout_alignment="horizontal_center"
ohos:text="你好鴻蒙_你畫我猜"
ohos:text_size="38fp"
/>

<Image
ohos:id="$+id:imageComponent"
ohos:height="200vp"
ohos:width="1080"
ohos:top_margin="150px"
ohos:image_src="$media:HM"
/>

<Button
ohos:id="$+id:help_btn"
ohos:height="100vp"
ohos:width="300vp"
ohos:background_element="$graphic:background_button"
ohos:layout_alignment="horizontal_center"
ohos:left_padding="15vp"
ohos:right_padding="15vp"
ohos:text="進入游戲"
ohos:text_size="30vp"
ohos:top_margin="20vp">
Button>


DirectionalLayout>

游戲匹配頁面布局 math_game:



<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">

<Button
ohos:id="$+id:help_btn"
ohos:height="match_content"
ohos:width="500px"
ohos:background_element="$graphic:background_begin"
ohos:layout_alignment="horizontal_center"
ohos:left_padding="15vp"
ohos:right_padding="15vp"
ohos:text="匹配對手"
ohos:text_size="30vp"
ohos:top_margin="200vp">
Button>
<Image
ohos:id="$+id:imageComponent"
ohos:height="200vp"
ohos:width="1080"
ohos:top_margin="100px"
ohos:image_src="$media:NHWC"

/>

DirectionalLayout>

MainAbilitySlice:

packagecom.huawei.codelab.slice;

importstaticohos.security.SystemPermission.DISTRIBUTED_DATASYNC;

importcom.huawei.codelab.ResourceTable;
importcom.huawei.codelab.utils.CommonData;
importcom.huawei.codelab.utils.LogUtil;
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.aafwk.content.Operation;
importohos.agp.components.Component;
importohos.bundle.IBundleManager;



publicclassMainAbilitySliceextendsAbilitySlice{
privatestaticfinalStringTAG=CommonData.TAG+MainAbilitySlice.class.getSimpleName();

privatestaticfinalintPERMISSION_CODE=10000000;

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
grantPermission();
initView();
}

voidgrantPermission(){//獲取驗證權限數(shù)據(jù)交互允許不同設備間的數(shù)據(jù)交換。
if(verifySelfPermission(DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){
if(canRequestPermission(DISTRIBUTED_DATASYNC)){
requestPermissionsFromUser(newString[]{DISTRIBUTED_DATASYNC},PERMISSION_CODE);
}
}
}
//
privatevoidinitView(){
findComponentById(ResourceTable.Id_help_btn).setClickedListener(newButtonClick());

}

privatevoidmathGame(){//數(shù)學游戲
LogUtil.info(TAG,"ClickResourceTableId_math_game");
IntentmathGameIntent=newIntent();
OperationoperationMath=newIntent.OperationBuilder().withBundleName(getBundleName())
.withAbilityName(CommonData.ABILITY_MAIN)
.withAction(CommonData.MATH_PAGE)
.build();
mathGameIntent.setOperation(operationMath);
startAbility(mathGameIntent);
}

//進入游戲
privateclassButtonClickimplementsComponent.ClickedListener{
@Override
publicvoidonClick(Componentcomponent){
mathGame();
}
}

}

MathGameAbilitySlice:

packagecom.huawei.codelab.slice;
importcom.huawei.codelab.ResourceTable;
importcom.huawei.codelab.devices.SelectDeviceDialog;
importcom.huawei.codelab.utils.CommonData;
importcom.huawei.codelab.utils.LogUtil;
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.aafwk.content.Operation;
importohos.agp.components.Button;
importohos.agp.components.Component;
importohos.data.distributed.common.KvManagerConfig;
importohos.data.distributed.common.KvManagerFactory;
importohos.distributedschedule.interwork.DeviceInfo;
importohos.distributedschedule.interwork.DeviceManager;
importjava.util.ArrayList;
importjava.util.List;


publicclassMathGameAbilitySliceextendsAbilitySlice{
privatestaticfinalStringTAG=CommonData.TAG+MathGameAbilitySlice.class.getSimpleName();

privateButtonhelpBtn;

privateListdevices=newArrayList<>();

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_math_game);
initView();

}

privatevoidinitView(){

if(findComponentById(ResourceTable.Id_help_btn)instanceofButton){
helpBtn=(Button)findComponentById(ResourceTable.Id_help_btn);
}
helpBtn.setClickedListener(newButtonClick());
}


privatevoidgetDevices(){
if(devices.size()>0){
devices.clear();
}
ListdeviceInfos=
DeviceManager.getDeviceList(ohos.distributedschedule.interwork.DeviceInfo.FLAG_GET_ONLINE_DEVICE);
LogUtil.info(TAG,"MathGameAbilitySlicedeviceInfossizeis:"+deviceInfos.size());
devices.addAll(deviceInfos);
showDevicesDialog();
}

privatevoidshowDevicesDialog(){
newSelectDeviceDialog(this,devices,deviceInfo->{
startLocalFa(deviceInfo.getDeviceId());
startRemoteFa(deviceInfo.getDeviceId());
}).show();
}

privatevoidstartLocalFa(StringdeviceId){
LogUtil.info(TAG,"startLocalFa......");
Intentintent=newIntent();
intent.setParam(CommonData.KEY_REMOTE_DEVICEID,deviceId);
intent.setParam(CommonData.KEY_IS_LOCAL,true);
Operationoperation=newIntent.OperationBuilder().withBundleName(getBundleName())
.withAbilityName(CommonData.ABILITY_MAIN)
.withAction(CommonData.DRAW_PAGE)
.build();
intent.setOperation(operation);
startAbility(intent);
}

privatevoidstartRemoteFa(StringdeviceId){
LogUtil.info(TAG,"startRemoteFa......");
StringlocalDeviceId=
KvManagerFactory.getInstance().createKvManager(newKvManagerConfig(this)).getLocalDeviceInfo().getId();
Intentintent=newIntent();
intent.setParam(CommonData.KEY_REMOTE_DEVICEID,localDeviceId);
intent.setParam(CommonData.KEY_IS_LOCAL,false);
Operationoperation=newIntent.OperationBuilder().withDeviceId(deviceId)
.withBundleName(getBundleName())
.withAbilityName(CommonData.ABILITY_MAIN)
.withAction(CommonData.DRAW_PAGE)
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intent.setOperation(operation);
startAbility(intent);
}

privateclassButtonClickimplementsComponent.ClickedListener{
@Override
publicvoidonClick(Componentcomponent){
getDevices();//啟動機器匹配
}
}
}

責任編輯:haq


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙系統(tǒng)

    關注

    183

    文章

    2638

    瀏覽量

    66601
  • HarmonyOS
    +關注

    關注

    79

    文章

    1982

    瀏覽量

    30425

原文標題:鴻蒙版你畫我猜,請接招!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    分布式云化數(shù)據(jù)庫有哪些類型

    分布式云化數(shù)據(jù)庫有哪些類型?分布式云化數(shù)據(jù)庫主要類型包括:關系型分布式數(shù)據(jù)庫、非關系型分布式數(shù)據(jù)庫、新SQL分布式數(shù)據(jù)庫、以列方式存儲數(shù)據(jù)、
    的頭像 發(fā)表于 01-15 09:43 ?89次閱讀

    基于ptp的分布式系統(tǒng)設計

    在現(xiàn)代分布式系統(tǒng)中,精確的時間同步對于確保數(shù)據(jù)致性、系統(tǒng)穩(wěn)定性和性能至關重要。PTP(Precision Time Protocol)是種網(wǎng)絡協(xié)議,用于在分布式系統(tǒng)中實現(xiàn)高精度的時
    的頭像 發(fā)表于 12-29 10:09 ?151次閱讀

    HarmonyOS Next 應用元服務開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)權限與基礎數(shù)據(jù)

    ) ?? \'\'); }); } } 在對端UIAbility的onCreate()/onNewWant()中,通過加入與源端致的分布式數(shù)據(jù)對象組網(wǎng)進行數(shù)據(jù)恢復。 創(chuàng)建空的分布式數(shù)據(jù)對象,用于接收
    發(fā)表于 12-24 09:40

    FPGA打磚塊小游戲設計思路

    ? 交流問題 ? Q :FPGA打磚塊小游戲,如何基于FPGA用verilog語言在Vivado平臺上寫打磚塊小游戲,最好能用到PS2與VGA。 A :以下是基于 FPGA? Ve
    的頭像 發(fā)表于 12-09 16:57 ?325次閱讀

    分布式通信的原理和實現(xiàn)高效分布式通信背后的技術NVLink的演進

    大型模型的大小已經(jīng)超出了單個 GPU 的范圍。所以就需要實現(xiàn)跨多個 GPU 的模型訓練,這種訓練方式就涉及到了分布式通信和 NVLink。 當談及分布式通信和 NVLink 時,我們進入了
    的頭像 發(fā)表于 11-18 09:39 ?587次閱讀
    <b class='flag-5'>分布式</b>通信的原理和實現(xiàn)高效<b class='flag-5'>分布式</b>通信背后的技術NVLink的演進

    分布式光纖測溫解決方案

    分布式光纖測溫解決方案
    的頭像 發(fā)表于 11-12 01:02 ?213次閱讀
    <b class='flag-5'>分布式</b>光纖測溫解決方案

    分布式光纖測溫是什么?應用領域是?

    分布式光纖測溫是種先進的溫度測量技術,它利用光纖的拉曼散射原理進行溫度監(jiān)測。以下是對分布式光纖測溫的詳細介紹: 、基本原理 分布式光纖測
    的頭像 發(fā)表于 10-24 15:30 ?471次閱讀
    <b class='flag-5'>分布式</b>光纖測溫是什么?應用領域是?

    分布式輸電線路故障定位中的分布式是指什么

    所謂分布式指的是產(chǎn)品的部署方式,是相對于集中式而言的。 、部署方式 分散安裝:分布式輸電線路故障定位系統(tǒng)中的采集裝置需要安裝在輸電線路的多個位置,通常是每隔定距離設置
    的頭像 發(fā)表于 10-16 11:39 ?329次閱讀
    <b class='flag-5'>分布式</b>輸電線路故障定位中的<b class='flag-5'>分布式</b>是指什么

    鴻蒙開發(fā)管理:ohos.account.distributedAccount 分布式帳號管理

    獲取分布式帳號單實例對象。
    的頭像 發(fā)表于 07-08 10:03 ?292次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā)管理:ohos.account.distributedAccount <b class='flag-5'>分布式</b>帳號管理

    鴻蒙ArkTS聲明開發(fā):跨平臺支持列表【分布式遷移標識】 通用屬性

    組件的分布式遷移標識,指明了該組件在分布式遷移場景下可以將特定狀態(tài)恢復到對端設備。
    的頭像 發(fā)表于 06-07 21:15 ?430次閱讀

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (分布式數(shù)據(jù)管理)】

    分布式數(shù)據(jù)管理為應用程序提供不同設備間數(shù)據(jù)庫的分布式協(xié)同能力。通過調(diào)用分布式數(shù)據(jù)各個接口,應用程序可將數(shù)據(jù)保存到分布式數(shù)據(jù)庫中,并可對分布式
    的頭像 發(fā)表于 06-07 09:30 ?1055次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b>數(shù)據(jù)管理)】

    HarmonyOS實戰(zhàn)案例:【分布式賬本】

    Demo基于Open Harmony系統(tǒng)使用ETS語言進行編寫,本Demo主要通過設備認證、分布式拉起、分布式數(shù)據(jù)管理等功能來實現(xiàn)。
    的頭像 發(fā)表于 04-12 16:40 ?1372次閱讀
    HarmonyOS實戰(zhàn)案例:【<b class='flag-5'>分布式</b>賬本】

    鴻蒙HarmonyOS開發(fā)實戰(zhàn):【分布式音樂播放】

    本示例使用fileIo獲取指定音頻文件,并通過AudioPlayer完成了音樂的播放完成了基本的音樂播放、暫停、上曲、下曲功能;并使用DeviceManager完成了分布式設備列表的顯示和
    的頭像 發(fā)表于 04-10 17:51 ?922次閱讀
    <b class='flag-5'>鴻蒙</b>HarmonyOS開發(fā)實戰(zhàn):【<b class='flag-5'>分布式</b>音樂播放】

    分布式控制系統(tǒng)的七功能和應用

    分布式控制系統(tǒng)的七功能和應用? 分布式控制系統(tǒng)是種由多個獨立的控制單元組成的系統(tǒng),每個控制單元負責系統(tǒng)中的部分功能。它具有分散的、自治
    的頭像 發(fā)表于 02-01 10:51 ?1527次閱讀

    鴻蒙OS 分布式任務調(diào)度

    鴻蒙OS 分布式任務調(diào)度概述 在 HarmonyO S中,分布式任務調(diào)度平臺對搭載 HarmonyOS 的多設備構筑的“超級虛擬終端”提供統(tǒng)的組件管理能力,為應用定義統(tǒng)
    的頭像 發(fā)表于 01-29 16:50 ?547次閱讀
    主站蜘蛛池模板: 抽插喷S骚爽去了H | 久艾草在线精品视频在线观看 | 免费99精品国产自在现线 | 被肉日常np快穿高h 被肉日常np高h | 真人女人无遮挡内谢免费视频% | 96精品视频| 国模玲玲自拍337p | 我要干av | 久久久久久人精品免费费看 | gogogo视频在线观看 | 就去色一色 | 色爱区综合小说 | 2019香蕉在线观看直播视频 | 国产成人拍精品免费视频爱情岛 | 国产亚洲精品字幕在线观看 | www色小姐 | 久久午夜宫电影网 | 边摸边吃奶玩乳尖视频 | 国产在线观看网址你懂得 | 久久青青无码AV亚洲黑人 | 国产AV亚洲精品久久久久软件 | 爱啪国产精品视频在线 | 中国比基尼美女 | 精品无码国产污污污免费网站2 | 国产免费内射又粗又爽密桃视频 | 秋霞成人午夜鲁丝一区二区三区 | 国产精品久久毛片A片软件爽爽 | 扒开美女下面粉嫩粉嫩冒白浆 | 黄 色 网 站 免 费 涩涩屋 | 国产在线精品亚洲另类 | 100国产精品人妻无码 | 赤兔CHINESE最新男18GUY | chinese极品嫩模videos | 在线亚洲国产日韩欧洲专区 | 暖暖日本免费播放 | 动漫美女被到爽了流漫画 | 国产精品无码无卡毛片不卡视 | 亚洲精品永久免费 | 久久婷婷五月综合色丁香 | 日韩一卡二卡三卡四卡免费观在线 | 清晨紧湿爱运动h高h |