?

基于鴻蒙系統的分布式音樂播放器設計與實現

2024-01-10 06:59劉丹董明華劉正
關鍵詞:鴻蒙列表按鈕

劉丹,董明華,劉正

(1.江蘇聯合職業技術學院蘇州工業園區分院,江蘇 蘇州 215123;2.蘇州工業園區服務外包職業技術學院,江蘇 蘇州 215123)

0 引言

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

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

1 關鍵技術研究

1.1 鴻蒙系統

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

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

1.2 分布式

鴻蒙的分布式能力是其最大的特點,可以讓更多設備組合實現超級終端體驗。HarmonyOS 的分布式能力眾多,包括分布式軟總線、分布式任務調度和分布式數據管理等。分布式任務調度讓應用開發者可以聚焦在業務實現上,很方便地開發HarmonyOS 上的分布式應用。

1.3 流轉

流轉在HarmonyOS 中泛指多設備分布式操作,即一個應用程序在某一個設備上運行,用戶切換到另外一個設備上繼續運行,同時停止在原來設備上的運行。流轉能力打破了設備界限,多設備聯動,使用戶應用程序可分可合、可流轉[6]。本文使用的是跨端遷移流轉,即在A 端運行的應用程序FA 遷移到B 端上,完成遷移后,FA 在B 端繼續執行,而在A 端退出應用[7]。

2 系統設計

2.1 分布式音樂播放器功能模塊設計

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

各模塊具體功能如下:

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

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

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

2.2 整體流程設計

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

3 系統實現

3.1 申請權限

本系統需要申請的權限有:本地多媒體訪問、多設備協同訪問權限。具體步驟如下。

3.1.1 靜態權限配置

在config.json 中的“reqPermissions”字段中聲明所需要的權限,該字段對應的value 值是一個數組,里面可以有多個對象,每個對象描述了一個權限。

以上代碼,分別申請了讀取存儲權限、多設備協同訪問權限。

3.1.2 動態權限配置

使用ohos.app.Context.verifySelfPermission()接口查詢應用是否已被授予權限,如果未被授予權限,使用canRequestPermission()查詢是否可動態申請權限,再使用requestPermissionsFromUser()動態申請多個權限。

3.1.3 權限申請成功回調

APP 在使用危險權限時,需要用戶授權后,才可進一步操作。重寫ohos.aafwk.ability.Ability 的回調函數onRequestPermissionsFromUserResult()接收授予結果。讀取存儲權限申請成功后,調用MainAbilitySlice 類自定義的initListContainer()方法,依據讀取到的音樂信息,設置ListContainer 數據源。

3.2 本地音樂列表展示

鴻蒙操作系統提供了可復用列表項的列表組件ListContainer,使用媒體外部存儲提供的文件路徑AVStorage.Audio.Media.EXTERNAL_DATA_ABILITY_URI 操作媒體元數據,將所有的音頻文件標識為AVElement 并存入List 中,作為ListContainer 列表組件的數據源。同時設置List-Container 的item 點擊事件,點擊某首音樂,進入該首音樂的播放界面。

3.3 音樂播放

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

用戶還可以使用播放/ 暫停、上一首、下一首、拖動進度條功能。播放狀態監聽器PlayerStateListener 中定義了播放成功、暫停、進度條變化、播放完成等回調方法。播放狀態改變時,使用handler 發送消息,回調對應方法,代碼如下。

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

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

(3)進度條改變:當進度條位置改變時,調用Player.rewindTo()方法改變播放位置到指定播放進度。

3.4 音樂流轉

用戶點擊音樂播放界面的“流轉”按鈕,系統為用戶提供可選擇流轉的設備信息,如平板或者手機其他設備;并在用戶完成設備選擇后回調通知應用開始流轉,將手機上正在播放的音樂流轉到用戶選中的設備上。

3.4.1 實現條件

需要流轉的兩臺設備需要滿足以下條件,才可以實現流轉。

(1)兩臺設備的wifi 在同一網絡。

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

進入手機設置界面,點擊“登錄華為賬號”,輸入賬號密碼后,點擊登錄或者使用短信驗證碼登錄—登錄成功。

(3)開啟手機設置中“多設備協同”。

進入手機設置界面,點擊打開 “更多連接”—“多設備協同”—選擇“開啟”。

3.4.2 實現IAbilityContinuation 接口,保存或還原應用程序數據

音樂播放MediaPlayerAbilitySlice 類實現IAbilityContinuation 接口,重寫該接口的四個抽象方法,通過接口中提供的方法來保存或還原應用程序數據。

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

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

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

(4)重寫方法onCompleteContinuation()。本地遷移完成后回調,調用termiate()方法結束原先設備上的應用程序。

3.4.3 點擊“流轉”按鈕,實現數據遷移

(1)應用向流轉任務管理服務注冊一個流轉回調器。

continuationRegisterManager.register (CONTINUE_BUNDLE,params,callback,requestCallback);params 指定流轉的目標設備類型及過濾參數,requestCallback 中獲取對應的注冊token。

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

通過流轉任務管理服務提供的showDeviceList()接口獲取可選擇設備列表,用戶選擇設備后在IContinuationDeviceCallback 回調中獲取選中設備的設備標識deviceId。

(3)設備連接成功后,更新流轉狀態。

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

(4)發起遷移請求。

通過continueAbility(deviceId)方法發起遷移請求,調用IAbilityContinuation 接口中提供的方法保存或還原應用程序數據,將主機功能遷移到同一分布式網絡上設備標識為deviceId 的設備上。

4 系統運行效果測試

利用DevEcoStudio 創建兩個模擬器,如圖2 所示。點擊運行箭頭,打開兩部模擬器。

圖2 創建模擬器

打開的兩臺設備,一個占用18888 端口,另一個占用18889 端口。點擊設備名稱的下拉菜單列表切換至18889 端口,如圖3 所示,分別將應用安裝在兩臺設備上。

圖3 切換運行設備

打開應用,首先進入權限窗界面,如圖4 所示。選擇“始終允許”,進入主界面,顯示本地音樂列表,如圖5(a)中所示的A 設備界面;點擊某一個列表項,進入音樂播放界面,如圖5(b)中的B 設備;點擊“流轉”按鈕,將B 設備當前播放音樂流轉到A 設備上,流轉后的設備界面如圖6 所示。

圖4 權限窗界面

圖5 流轉前

圖6 流轉后

5 結束語

本文基于HarmonyOS 平臺,使用分布式技術實現了本地音樂的遠程同步,能滿足用戶根據實際場景,在可信設備間流轉本地音樂的使用需求,具有較強的實用價值。

猜你喜歡
鴻蒙列表按鈕
當你面前有個按鈕
奇思妙想(4)
鴻蒙:打破安卓壟斷 所有權歸屬國家
鴻蒙來了
學習運用列表法
華為一大批鴻蒙商標等待審查
擴列吧
死循環
列表畫樹狀圖各有所長
內心不能碰的按鈕
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合