国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于鴻蒙系統(tǒng)的分布式音樂播放器設(shè)計(jì)與實(shí)現(xiàn)

2024-01-10 06:59:04劉丹董明華劉正
關(guān)鍵詞:鴻蒙列表按鈕

劉丹,董明華,劉正

(1.江蘇聯(lián)合職業(yè)技術(shù)學(xué)院蘇州工業(yè)園區(qū)分院,江蘇 蘇州 215123;2.蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)技術(shù)學(xué)院,江蘇 蘇州 215123)

0 引言

近年來,在5G、AIoT 技術(shù)的推動(dòng)下,我國智能電視、智能音箱、智能車載、智能耳機(jī)等智能終端行業(yè)發(fā)展迅速,智能終端上的用戶對音樂服務(wù)的需求增長非???。用戶在聽音樂時(shí),當(dāng)使用情境發(fā)生變化時(shí),之前使用的設(shè)備可能不適合繼續(xù)當(dāng)前的任務(wù),此時(shí),用戶可以選擇一鍵將音樂流轉(zhuǎn)到智慧屏、平板、手表、音箱等鴻蒙設(shè)備,使用新的設(shè)備來繼續(xù)播放音樂,音樂播放的無縫流轉(zhuǎn)給用戶帶來流暢完整的沉浸式體驗(yàn)[1]。

本文利用鴻蒙系統(tǒng)的分布式能力,實(shí)現(xiàn)了音樂服務(wù)的跨設(shè)備流轉(zhuǎn),主要功能包括:本地音樂列表展示、音樂播放/ 暫停、上一首、下一首和同步音樂到可信設(shè)備。系統(tǒng)界面簡潔、易用,用戶可以方便地完成音樂播放器在不同設(shè)備間的流轉(zhuǎn)。

1 關(guān)鍵技術(shù)研究

1.1 鴻蒙系統(tǒng)

華為鴻蒙系統(tǒng)(HarmonyOS)是一款全新的面向全場景的開源分布式操作系統(tǒng),為不同設(shè)備的互聯(lián)與協(xié)同提供了統(tǒng)一的平臺(tái)[2],具有分布式架構(gòu)Kit 提供屏幕布局控件及交互的自動(dòng)適配功能,使開發(fā)者可以基于同一工程高效構(gòu)建多端自動(dòng)運(yùn)行的APP,實(shí)現(xiàn)跨設(shè)備之間的生態(tài)共享[3]。

華為鴻蒙系統(tǒng)采用了支持高性能多語言編譯的方舟編譯器,能夠完成聯(lián)合優(yōu)化,提高代碼執(zhí)行效率,性能上不弱于安卓系統(tǒng)[4]。由于鴻蒙系統(tǒng)微內(nèi)核的代碼量只有Linux 宏內(nèi)核的千分之一,其受攻擊概率也大幅降低[5]。鴻蒙系統(tǒng)也因此成為史上發(fā)展最快的智能終端操作系統(tǒng)。

1.2 分布式

鴻蒙的分布式能力是其最大的特點(diǎn),可以讓更多設(shè)備組合實(shí)現(xiàn)超級終端體驗(yàn)。HarmonyOS 的分布式能力眾多,包括分布式軟總線、分布式任務(wù)調(diào)度和分布式數(shù)據(jù)管理等。分布式任務(wù)調(diào)度讓應(yīng)用開發(fā)者可以聚焦在業(yè)務(wù)實(shí)現(xiàn)上,很方便地開發(fā)HarmonyOS 上的分布式應(yīng)用。

1.3 流轉(zhuǎn)

流轉(zhuǎn)在HarmonyOS 中泛指多設(shè)備分布式操作,即一個(gè)應(yīng)用程序在某一個(gè)設(shè)備上運(yùn)行,用戶切換到另外一個(gè)設(shè)備上繼續(xù)運(yùn)行,同時(shí)停止在原來設(shè)備上的運(yùn)行。流轉(zhuǎn)能力打破了設(shè)備界限,多設(shè)備聯(lián)動(dòng),使用戶應(yīng)用程序可分可合、可流轉(zhuǎn)[6]。本文使用的是跨端遷移流轉(zhuǎn),即在A 端運(yùn)行的應(yīng)用程序FA 遷移到B 端上,完成遷移后,F(xiàn)A 在B 端繼續(xù)執(zhí)行,而在A 端退出應(yīng)用[7]。

2 系統(tǒng)設(shè)計(jì)

2.1 分布式音樂播放器功能模塊設(shè)計(jì)

用戶打開APP,提醒用戶是否授予讀取存儲(chǔ)權(quán)限和多設(shè)備協(xié)同訪問權(quán)限。用戶允許后,進(jìn)入主頁,展示本地音樂列表。點(diǎn)擊其中的任一首音樂,進(jìn)入音樂播放界面,展示歌曲名、播放時(shí)長等信息,以及“上一首”“下一首”“播放/ 暫?!薄傲鬓D(zhuǎn)”等按鈕。點(diǎn)擊“播放/ 暫?!卑粹o,實(shí)現(xiàn)播放/ 暫停;點(diǎn)擊“流轉(zhuǎn)”按鈕,獲取信任的設(shè)備列表,用戶選擇需要流轉(zhuǎn)的設(shè)備,將當(dāng)前播放的音樂流轉(zhuǎn)到選中的設(shè)備上。系統(tǒng)包括以下三個(gè)模塊:本地音樂列表展示、音樂播放、音樂流轉(zhuǎn),功能模塊圖如圖1 所示。

各模塊具體功能如下:

(1)本地音樂列表展示:讀取本地音樂文件,以列表形式展示。

(2)音樂播放:音樂播放界面展示歌曲名、播放時(shí)長和播放狀態(tài)信息。通過界面按鈕,實(shí)現(xiàn)上一首、下一首、音樂播放、暫停和進(jìn)度控制。

(3)音樂流轉(zhuǎn):點(diǎn)擊“流轉(zhuǎn)”按鈕,彈出查找可信任設(shè)備對話框,展示設(shè)備查找結(jié)果,選中需要流轉(zhuǎn)的設(shè)備,同步音樂到該設(shè)備,同步信息包括:音樂文件路徑、音樂時(shí)長和音樂播放狀態(tài)等。

2.2 整體流程設(shè)計(jì)

音樂播放器的主要流程為:打開應(yīng)用,提示是否授予APP 訪問設(shè)備上的媒體和使用多設(shè)備協(xié)同的權(quán)限;選擇“始終允許”,進(jìn)入主界面,顯示本地音樂列表,點(diǎn)擊某一個(gè)列表項(xiàng),進(jìn)入音樂播放界面。在音樂播放界面可以實(shí)現(xiàn)播放/ 暫停音樂,播放上一首、下一首音樂,或者切換播放進(jìn)度等功能。點(diǎn)擊“流轉(zhuǎn)”按鈕,選擇需要流轉(zhuǎn)的設(shè)備,將當(dāng)前播放音樂流轉(zhuǎn)到新設(shè)備上,保持遠(yuǎn)程設(shè)備上播放的音樂和原設(shè)備播放的音樂播放狀態(tài)、播放時(shí)長等一致,實(shí)現(xiàn)無縫流轉(zhuǎn)。

3 系統(tǒng)實(shí)現(xiàn)

3.1 申請權(quán)限

本系統(tǒng)需要申請的權(quán)限有:本地多媒體訪問、多設(shè)備協(xié)同訪問權(quán)限。具體步驟如下。

3.1.1 靜態(tài)權(quán)限配置

在config.json 中的“reqPermissions”字段中聲明所需要的權(quán)限,該字段對應(yīng)的value 值是一個(gè)數(shù)組,里面可以有多個(gè)對象,每個(gè)對象描述了一個(gè)權(quán)限。

以上代碼,分別申請了讀取存儲(chǔ)權(quán)限、多設(shè)備協(xié)同訪問權(quán)限。

3.1.2 動(dòng)態(tài)權(quán)限配置

使用ohos.app.Context.verifySelfPermission()接口查詢應(yīng)用是否已被授予權(quán)限,如果未被授予權(quán)限,使用canRequestPermission()查詢是否可動(dòng)態(tài)申請權(quán)限,再使用requestPermissionsFromUser()動(dòng)態(tài)申請多個(gè)權(quán)限。

3.1.3 權(quán)限申請成功回調(diào)

APP 在使用危險(xiǎn)權(quán)限時(shí),需要用戶授權(quán)后,才可進(jìn)一步操作。重寫ohos.aafwk.ability.Ability 的回調(diào)函數(shù)onRequestPermissionsFromUserResult()接收授予結(jié)果。讀取存儲(chǔ)權(quán)限申請成功后,調(diào)用MainAbilitySlice 類自定義的initListContainer()方法,依據(jù)讀取到的音樂信息,設(shè)置ListContainer 數(shù)據(jù)源。

3.2 本地音樂列表展示

鴻蒙操作系統(tǒng)提供了可復(fù)用列表項(xiàng)的列表組件ListContainer,使用媒體外部存儲(chǔ)提供的文件路徑AVStorage.Audio.Media.EXTERNAL_DATA_ABILITY_URI 操作媒體元數(shù)據(jù),將所有的音頻文件標(biāo)識為AVElement 并存入List 中,作為ListContainer 列表組件的數(shù)據(jù)源。同時(shí)設(shè)置List-Container 的item 點(diǎn)擊事件,點(diǎn)擊某首音樂,進(jìn)入該首音樂的播放界面。

3.3 音樂播放

點(diǎn)擊ListContainer 的某個(gè)item,獲取該item 的位置信息,根據(jù)位置信息獲取到該音樂的AVElement 對象,從而取出媒體資源文件路徑,調(diào)用onUriSet()設(shè)置當(dāng)前播放音樂的文件路徑;取出音樂名稱、音樂時(shí)長等信息,展示在音樂播放界面。

用戶還可以使用播放/ 暫停、上一首、下一首、拖動(dòng)進(jìn)度條功能。播放狀態(tài)監(jiān)聽器PlayerStateListener 中定義了播放成功、暫停、進(jìn)度條變化、播放完成等回調(diào)方法。播放狀態(tài)改變時(shí),使用handler 發(fā)送消息,回調(diào)對應(yīng)方法,代碼如下。

(1)播放/ 暫停:初始界面為暫停狀態(tài),點(diǎn)擊一次該按鈕,開始播放音樂;啟動(dòng)定時(shí)器,每隔1 s 更新當(dāng)前播放進(jìn)度;通過handler 發(fā)消息,回調(diào)Player-StateListener 的播放成功方法onPlaySuccess(),在該方法中修改按鈕圖標(biāo),設(shè)置總時(shí)長和進(jìn)度條的最大值;播放完成后,回調(diào)播放完成方法onMusicFinished(),播放下一首。播放過程中,再點(diǎn)擊一次該按鈕,暫停播放,回調(diào)onPauseSuccess()方法,改變該按鈕圖標(biāo)為暫停狀態(tài)。

(2)上一首/ 下一首:點(diǎn)擊“上一首”按鈕,播放位置減1,如果已經(jīng)為第一首,則切換到最后一首,獲取對應(yīng)位置的音樂文件路徑,調(diào)用onUriSet()設(shè)置當(dāng)前播放音樂的文件路徑。點(diǎn)擊“下一首”按鈕,播放位置加1,如果已經(jīng)為最后一首,則播放第一首。

(3)進(jìn)度條改變:當(dāng)進(jìn)度條位置改變時(shí),調(diào)用Player.rewindTo()方法改變播放位置到指定播放進(jìn)度。

3.4 音樂流轉(zhuǎn)

用戶點(diǎn)擊音樂播放界面的“流轉(zhuǎn)”按鈕,系統(tǒng)為用戶提供可選擇流轉(zhuǎn)的設(shè)備信息,如平板或者手機(jī)其他設(shè)備;并在用戶完成設(shè)備選擇后回調(diào)通知應(yīng)用開始流轉(zhuǎn),將手機(jī)上正在播放的音樂流轉(zhuǎn)到用戶選中的設(shè)備上。

3.4.1 實(shí)現(xiàn)條件

需要流轉(zhuǎn)的兩臺(tái)設(shè)備需要滿足以下條件,才可以實(shí)現(xiàn)流轉(zhuǎn)。

(1)兩臺(tái)設(shè)備的wifi 在同一網(wǎng)絡(luò)。

(2)登錄相同的華為賬號。

進(jìn)入手機(jī)設(shè)置界面,點(diǎn)擊“登錄華為賬號”,輸入賬號密碼后,點(diǎn)擊登錄或者使用短信驗(yàn)證碼登錄—登錄成功。

(3)開啟手機(jī)設(shè)置中“多設(shè)備協(xié)同”。

進(jìn)入手機(jī)設(shè)置界面,點(diǎn)擊打開 “更多連接”—“多設(shè)備協(xié)同”—選擇“開啟”。

3.4.2 實(shí)現(xiàn)IAbilityContinuation 接口,保存或還原應(yīng)用程序數(shù)據(jù)

音樂播放MediaPlayerAbilitySlice 類實(shí)現(xiàn)IAbilityContinuation 接口,重寫該接口的四個(gè)抽象方法,通過接口中提供的方法來保存或還原應(yīng)用程序數(shù)據(jù)。

(1)重寫方法onStartContinuation()。方法返回true,允許流轉(zhuǎn)。

(2)重寫方法onSaveData()。方法返回true,保存遷移后恢復(fù)狀態(tài)必需的數(shù)據(jù),主要有:當(dāng)前播放音樂的文件路徑、播放時(shí)間、播放狀態(tài)信息。

(3)重寫方法onRestoreData()。方法返回true,將當(dāng)前播放音樂流轉(zhuǎn)到遠(yuǎn)程設(shè)備時(shí),遠(yuǎn)程設(shè)備可以獲取并恢復(fù)onSaveData()方法中保存的數(shù)據(jù):當(dāng)前播放的是哪首歌曲、播放狀態(tài)及播放時(shí)長,保持遠(yuǎn)程設(shè)備上播放的音樂和原設(shè)備一致,實(shí)現(xiàn)無縫流轉(zhuǎn)。以恢復(fù)文件路徑為例,代碼實(shí)現(xiàn)如下。

(4)重寫方法onCompleteContinuation()。本地遷移完成后回調(diào),調(diào)用termiate()方法結(jié)束原先設(shè)備上的應(yīng)用程序。

3.4.3 點(diǎn)擊“流轉(zhuǎn)”按鈕,實(shí)現(xiàn)數(shù)據(jù)遷移

(1)應(yīng)用向流轉(zhuǎn)任務(wù)管理服務(wù)注冊一個(gè)流轉(zhuǎn)回調(diào)器。

continuationRegisterManager.register (CONTINUE_BUNDLE,params,callback,requestCallback);params 指定流轉(zhuǎn)的目標(biāo)設(shè)備類型及過濾參數(shù),requestCallback 中獲取對應(yīng)的注冊token。

(2)查詢可選擇設(shè)備列表,選取設(shè)備后,返回所選設(shè)備ID。

通過流轉(zhuǎn)任務(wù)管理服務(wù)提供的showDeviceList()接口獲取可選擇設(shè)備列表,用戶選擇設(shè)備后在IContinuationDeviceCallback 回調(diào)中獲取選中設(shè)備的設(shè)備標(biāo)識deviceId。

(3)設(shè)備連接成功后,更新流轉(zhuǎn)狀態(tài)。

continuationRegisterManager.updateConnectStatus(abilityToken,deviceId,DeviceConnectState.CONNECTED.getState(),null);

(4)發(fā)起遷移請求。

通過continueAbility(deviceId)方法發(fā)起遷移請求,調(diào)用IAbilityContinuation 接口中提供的方法保存或還原應(yīng)用程序數(shù)據(jù),將主機(jī)功能遷移到同一分布式網(wǎng)絡(luò)上設(shè)備標(biāo)識為deviceId 的設(shè)備上。

4 系統(tǒng)運(yùn)行效果測試

利用DevEcoStudio 創(chuàng)建兩個(gè)模擬器,如圖2 所示。點(diǎn)擊運(yùn)行箭頭,打開兩部模擬器。

圖2 創(chuàng)建模擬器

打開的兩臺(tái)設(shè)備,一個(gè)占用18888 端口,另一個(gè)占用18889 端口。點(diǎn)擊設(shè)備名稱的下拉菜單列表切換至18889 端口,如圖3 所示,分別將應(yīng)用安裝在兩臺(tái)設(shè)備上。

圖3 切換運(yùn)行設(shè)備

打開應(yīng)用,首先進(jìn)入權(quán)限窗界面,如圖4 所示。選擇“始終允許”,進(jìn)入主界面,顯示本地音樂列表,如圖5(a)中所示的A 設(shè)備界面;點(diǎn)擊某一個(gè)列表項(xiàng),進(jìn)入音樂播放界面,如圖5(b)中的B 設(shè)備;點(diǎn)擊“流轉(zhuǎn)”按鈕,將B 設(shè)備當(dāng)前播放音樂流轉(zhuǎn)到A 設(shè)備上,流轉(zhuǎn)后的設(shè)備界面如圖6 所示。

圖4 權(quán)限窗界面

圖5 流轉(zhuǎn)前

圖6 流轉(zhuǎn)后

5 結(jié)束語

本文基于HarmonyOS 平臺(tái),使用分布式技術(shù)實(shí)現(xiàn)了本地音樂的遠(yuǎn)程同步,能滿足用戶根據(jù)實(shí)際場景,在可信設(shè)備間流轉(zhuǎn)本地音樂的使用需求,具有較強(qiáng)的實(shí)用價(jià)值。

猜你喜歡
鴻蒙列表按鈕
巧用列表來推理
當(dāng)你面前有個(gè)按鈕
奇思妙想(4)
鴻蒙:打破安卓壟斷 所有權(quán)歸屬國家
鴻蒙來了
金橋(2021年7期)2021-07-22 01:55:34
學(xué)習(xí)運(yùn)用列表法
華為一大批鴻蒙商標(biāo)等待審查
擴(kuò)列吧
死循環(huán)
內(nèi)心不能碰的按鈕
林甸县| 桦甸市| 五常市| 涿州市| 鹤山市| 伊通| 永兴县| 兰坪| 福州市| 云梦县| 普宁市| 山丹县| 嫩江县| 海盐县| 孝昌县| 江西省| 烟台市| 阳原县| 张掖市| 合阳县| 广东省| 吉安县| 玉环县| 南投县| 许昌县| 湄潭县| 昌图县| 阳山县| 页游| 古田县| 宁阳县| 富川| 泰安市| 孝昌县| 青川县| 革吉县| 汶川县| 遂川县| 房产| 自治县| 潢川县|