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

華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)

系統(tǒng) OpenHarmony
本次主要在分布式音樂(lè)播放器案例中加入了智慧屏特有的可見(jiàn)即可說(shuō)的功能,和一些簡(jiǎn)單的優(yōu)化和動(dòng)畫。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

在HarmonyOS官方文檔中,有這樣一項(xiàng)功能是只能在智慧屏上使用的,那就是可見(jiàn)即可說(shuō)。恰好在很久之前參照官方分布式音樂(lè)播放器定制了一款自己的播放器,今天將其改造成智慧屏應(yīng)用,并添加可見(jiàn)即可說(shuō)功能。待真機(jī)演示,有設(shè)備的小伙伴可以測(cè)試一下!

一、效果演示

  • 各設(shè)備

#夏日挑戰(zhàn)賽#【FFH】華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)-開(kāi)源基礎(chǔ)軟件社區(qū)

  • 手機(jī)平板,智慧屏

#夏日挑戰(zhàn)賽#【FFH】華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)-開(kāi)源基礎(chǔ)軟件社區(qū)
#夏日挑戰(zhàn)賽#【FFH】華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)-開(kāi)源基礎(chǔ)軟件社區(qū)
#夏日挑戰(zhàn)賽#【FFH】華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)-開(kāi)源基礎(chǔ)軟件社區(qū)

  • 真機(jī)待測(cè)…(to do 7月7號(hào))

二、可見(jiàn)即可說(shuō)功能

按照官方文檔的介紹,可見(jiàn)即可說(shuō)就是將一些熱詞與Component關(guān)聯(lián),達(dá)到監(jiān)聽(tīng)語(yǔ)音熱詞,來(lái)執(zhí)行一些相應(yīng)操作。例如,瀏覽圖片的時(shí)候,說(shuō)出圖片的名字或者角標(biāo)序號(hào),從而實(shí)現(xiàn)打開(kāi)圖片的效果。

那么相應(yīng)的,我們就能將分布式音樂(lè)播放器改造成語(yǔ)音控制的,比如將"播放",“暫停”,"上一首"等熱詞綁定到對(duì)應(yīng)組件上,監(jiān)測(cè)到熱詞的時(shí)候執(zhí)行功能即可。

三、可見(jiàn)即可說(shuō)開(kāi)發(fā)

1、熱詞注冊(cè)

  • 創(chuàng)建Component.VoiceEvent對(duì)象,設(shè)置相應(yīng)的熱詞,英文和中文都是可以的。

可見(jiàn)即可說(shuō)的功能的核心就是,Component.VoiceEvent對(duì)象,一個(gè)對(duì)象對(duì)應(yīng)一個(gè)事件。

//  比如說(shuō)設(shè)置一個(gè)播放事件
Component.VoiceEvent eventplay = new Component.VoiceEvent("播放");
  • 一個(gè)Component.VoiceEvent對(duì)象,可以綁定多個(gè)熱詞。
eventplay.addSynonyms("play");
  • 綁定完熱詞后,哪個(gè)組件需要這個(gè)語(yǔ)音事件,哪個(gè)組件就需要進(jìn)行注冊(cè)。
//比如分布式音樂(lè)播放器里面的播放按鈕,對(duì)該語(yǔ)音事件進(jìn)行注冊(cè)。
musicPlayButton.subscribeVoiceEvents(eventplay);
  • 如果組件有多個(gè)語(yǔ)音事件要響應(yīng),我們就的創(chuàng)建多個(gè)Component.VoiceEvent對(duì)象,并且都進(jìn)行注冊(cè)。一個(gè)對(duì)象對(duì)應(yīng)一個(gè)事件。

2、事件開(kāi)發(fā)

在前面,我們?cè)O(shè)置了語(yǔ)音事件,并且將一個(gè)播放按鈕對(duì)其進(jìn)行了注冊(cè)。但也僅僅是注冊(cè),然后呢?然后就沒(méi)然后了,因?yàn)槲覀冞€沒(méi)有進(jìn)行事件開(kāi)發(fā),按鈕要在事件發(fā)生時(shí)做出響應(yīng)。

(1)實(shí)現(xiàn)SpeechEventListener接口

private Component.SpeechEventListener speechEventListener = new Component.SpeechEventListener(){
@Override
public boolean onSpeechEvent(Component v, SpeechEvent event) {
if (event.getActionProperty().equals("播放")) {
... // 檢測(cè)注冊(cè)的熱詞,進(jìn)行相應(yīng)的處理
playOrpause();
}
return false;
};
}

(2)通過(guò)setSpeechEventListener方法實(shí)現(xiàn)回調(diào)注冊(cè)

musicplayButton.setSpeechEventListener(speechEventListener);

至此,我們對(duì)可見(jiàn)即可說(shuō)的功能已經(jīng)了解了,那么下面是對(duì)分布式音樂(lè)播放器案例的改造,感興趣的讀者往下看。

四、案例編寫

1、工程結(jié)構(gòu)

#夏日挑戰(zhàn)賽#【FFH】華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)-開(kāi)源基礎(chǔ)軟件社區(qū)

2、UI設(shè)計(jì)

#夏日挑戰(zhàn)賽#【FFH】華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)-開(kāi)源基礎(chǔ)軟件社區(qū)

3、架構(gòu)簡(jiǎn)析

這里簡(jiǎn)單剖析一下架構(gòu),詳情見(jiàn)附件工程文件。

  • PlayerManager.java
    封裝好的播放器類,設(shè)置音樂(lè)路徑,播放暫停,上一首下一首的功能。
/**
* 首先播放之前要準(zhǔn)備好媒體資源
*/
public void prepareMusic(){...}
/**
* 準(zhǔn)備好音頻路徑 準(zhǔn)備媒體資源
* @param Uri
*/
public void setResource(String Uri){...}
/**
* 播放
*/
public void play(){...}
/**
* 暫停
*/
public void pause(){...}
/**
* 定時(shí)事件通知更新進(jìn)度條
* DELAY_TIME 延遲1s
* PERIOD 兩個(gè)事件間隔1s
*/
private void startTimetask(){...}
//.....
  • StateListener
    播放器狀態(tài)監(jiān)聽(tīng)接口,監(jiān)聽(tīng)播放器狀態(tài)進(jìn)而進(jìn)行一些事件通知。
package com.yzj.musicplayer.Player;

public interface StateListener {
void onPlaySuccess(int totalTime);

void onPauseSuccess();

void onPositionChange(int currentTime);

void onMusicFinished();

void onUriSet(String name);
}
  • CommonProvider,ViewProvidor

 用來(lái)生成dialog,顯示可分布式流轉(zhuǎn)的設(shè)備列表, 對(duì)此不贅述,用JAVA做UI體驗(yàn)不是很好。

  • MainAbilitySlice

主頁(yè)面

4、綁定可見(jiàn)即可說(shuō)事件

這里我們有播放,暫停,上一首,下一首,拖動(dòng)進(jìn)度條,分布式流轉(zhuǎn)等操作。

我們逐一為其添加語(yǔ)音事件。

//測(cè)試
//播放
private Component.VoiceEvent eventplay;
//暫停
private Component.VoiceEvent eventpause;
//下一首
private Component.VoiceEvent eventnext;
//前一首
private Component.VoiceEvent eventpre;
//流轉(zhuǎn)
private Component.VoiceEvent eventremote;
//流轉(zhuǎn)的語(yǔ)音相應(yīng)事件
private Component.SpeechEventListener speech_mShowDeviceListListener = new Component.SpeechEventListener() {
@Override
public boolean onSpeechEvent(Component component, SpeechEvent speechEvent) {
if(speechEvent.getActionProperty().equals("流轉(zhuǎn)")){
// 顯示選擇設(shè)備列表
continuationRegisterManager.showDeviceList(abilityToken, null, null);
}
return false;
}
};
void initview(){
//綁定熱詞
eventplay = new Component.VoiceEvent("播放");
eventpause = new Component.VoiceEvent("暫停");
eventnext = new Component.VoiceEvent("下一首");
eventpre = new Component.VoiceEvent("上一首");
eventremote = new Component.VoiceEvent("流轉(zhuǎn)");
//播放按鈕注冊(cè)熱詞
musicPlayButton.subscribeVoiceEvents(eventplay);
musicPlayButton.subscribeVoiceEvents(eventpause);
//播放按鈕設(shè)置響應(yīng)事件
musicPlayButton.setSpeechEventListener(new Component.SpeechEventListener() {
@Override
public boolean onSpeechEvent(Component component, SpeechEvent speechEvent) {
if(speechEvent.getActionProperty().equals("播放")){
if(playerManager.isPlaying()){
Log.info(TAG,"正在播放");
}
else{
playOrPause();
}
return true;
}
else if(speechEvent.getActionProperty().equals("暫停")){
if(!playerManager.isPlaying()){
Log.info(TAG,"已經(jīng)暫停了");
}
else{
playOrPause();
}
return true;
}
return false;
};
});
//下一首注冊(cè)熱詞
playnextButton.subscribeVoiceEvents(eventnext);
//下一首設(shè)置響應(yīng)事件
playnextButton.setSpeechEventListener(new Component.SpeechEventListener() {
@Override
public boolean onSpeechEvent(Component component, SpeechEvent speechEvent) {
if(speechEvent.getActionProperty().equals("下一首")){
nextMusic(component);
return true;
}
return false;
}
});
//上一首注冊(cè)熱詞
playpreButton.subscribeVoiceEvents(eventpre);
//上一首設(shè)置響應(yīng)事件
playpreButton.setSpeechEventListener(new Component.SpeechEventListener() {
@Override
public boolean onSpeechEvent(Component component, SpeechEvent speechEvent) {
if(speechEvent.getActionProperty().equals("上一首")){
prevMusic(component);
return true;
}
return false;
}
});
remotePlay.setClickedListener(mShowDeviceListListener);
//流轉(zhuǎn)按鈕注冊(cè)熱詞
remotePlay.subscribeVoiceEvents(eventremote);
//流轉(zhuǎn)按鈕設(shè)置流轉(zhuǎn)彈窗事件
remotePlay.setSpeechEventListener(speech_mShowDeviceListListener);
}

這里只展示了核心部分的代碼,具體含義看名稱即可知,詳情參見(jiàn)附件。

五、關(guān)于分布式流轉(zhuǎn)

關(guān)于流轉(zhuǎn)的部分,這里簡(jiǎn)單復(fù)習(xí)一下。

在本案例里,任何動(dòng)態(tài)變化的數(shù)據(jù)都是遷移和恢復(fù)的內(nèi)容。

#夏日挑戰(zhàn)賽#【FFH】華為智慧屏分布式語(yǔ)音音樂(lè)軟件,可見(jiàn)即可說(shuō)-開(kāi)源基礎(chǔ)軟件社區(qū)

六、關(guān)于旋轉(zhuǎn)動(dòng)畫

  • 創(chuàng)建一個(gè)屬性動(dòng)畫
/* 屬性動(dòng)畫 */
private AnimatorProperty animatorProperty;
  • 初始化一個(gè)屬性對(duì)象
//初始化屬性動(dòng)畫對(duì)象 musicPosters是一個(gè)Image組件
animatorProperty = musicPosters.createAnimatorProperty();
animatorProperty.setCurveType(Animator.CurveType.LINEAR);
  • 啟動(dòng)
//讓他一直循環(huán)轉(zhuǎn)下去
animatorProperty.rotate(360+musicPosters.getRotation()).setDuration(100000).setLoopedCount(-1).start();
  • 暫停,重置
animatorProperty.stop();
animatorProperty.reset();

各種操作放在合適的位置執(zhí)行就可以了。

七、結(jié)語(yǔ)

本次主要在分布式音樂(lè)播放器案例中加入了智慧屏特有的可見(jiàn)即可說(shuō)的功能,和一些簡(jiǎn)單的優(yōu)化和動(dòng)畫。在手機(jī),平板上也能有類似的操作,可參考分布式語(yǔ)音照相機(jī),但相比之下還是覺(jué)得可見(jiàn)即可說(shuō)的功能更加清楚和好用。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??。

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2020-04-21 12:12:06

華為

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2019-08-09 10:16:30

鴻蒙OS華為智慧生活

2020-10-13 09:56:36

數(shù)據(jù)中心混合云技術(shù)

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2017-09-01 05:35:58

分布式計(jì)算存儲(chǔ)

2019-06-19 15:40:06

分布式鎖RedisJava

2021-08-24 15:13:06

鴻蒙HarmonyOS應(yīng)用

2017-10-27 08:40:44

分布式存儲(chǔ)剪枝系統(tǒng)

2023-10-26 18:10:43

分布式并行技術(shù)系統(tǒng)

2018-01-12 16:51:48

華為

2018-07-17 08:14:22

分布式分布式鎖方位

2024-03-01 09:53:34

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2023-05-12 08:23:03

分布式系統(tǒng)網(wǎng)絡(luò)

2022-05-09 15:08:56

存儲(chǔ)廠商NFV領(lǐng)域華為

2011-03-28 13:39:45

nagios分布式

2022-10-25 14:05:47

共識(shí)算法系統(tǒng)

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)

2022-11-08 15:48:35

應(yīng)用開(kāi)發(fā)音樂(lè)播放器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人免费视频观看 | 亚洲一二三在线 | 国产精品久久久久久亚洲调教 | 久久久久久成人 | 久久久精品 | 日本成人三级电影 | 国产一区二区在线观看视频 | 91亚洲国产成人久久精品网站 | 国产精品自拍一区 | 国产精品成人av | 好姑娘影视在线观看高清 | 成人一区在线观看 | 成人国产毛片 | 精品久久久久久中文字幕 | 国产毛片视频 | 欧美精品在线播放 | 精品久久久久久久久久久久久久 | 香蕉久久a毛片 | av影音资源 | 精品日韩一区二区 | 久久久久久久久久一区 | 欧美日韩国产高清 | 麻豆国产精品777777在线 | 精品亚洲一区二区三区 | 无码国模国产在线观看 | 九九精品在线 | 亚洲欧美精品在线 | 免费a级毛片在线播放 | 欧美福利 | 婷婷亚洲综合 | 91丨国产 | 成人午夜在线观看 | 日本中文字幕一区 | 久久成人精品视频 | 夜夜夜夜夜夜曰天天天 | 欧美在线一区二区三区 | 久久99精品视频 | 在线成人免费观看 | 日韩欧美成人精品 | 黄色网址在线播放 | 夜夜爽99久久国产综合精品女不卡 |