freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android平臺的多媒體播放器的開發(fā)-資料下載頁

2024-10-24 18:42本頁面

【導讀】本文主要是對Android系統(tǒng)上的一款多媒體播放器應用程序的設計與實現(xiàn)進行闡述。用了Android開源系統(tǒng)技術,利用Java語言和Eclipse開發(fā)工具來實現(xiàn)這款播放器。中遇到的問題及解決方案進行了討論。該多媒體播放器集音頻、視頻播放于一體,音頻播放。部分實現(xiàn)了播放、暫停、上一首、下一首、音量調(diào)節(jié)、歌詞同步顯示、播放模式選擇等功能。能以外,還支持不同視頻畫面比例的切換等功能。代要求的,對比時下硬件的發(fā)展速度,應用軟件的研發(fā)還有很長的路要走。已經(jīng)是人類生活中不可或缺的一部分了。本項目完成手機多媒體播放器的開發(fā),并能將一些個性化設計融入其中。件的多線程管理,實現(xiàn)該多媒體播放器的后臺播放和后臺Service控制。關注內(nèi)容而非修飾。保存一致,讓用戶容易投入其中,可附加少許變化。使用云端服務來加強用戶體驗。人一種簡約的時尚感,也讓人加深對SkyPlayer這個播放器的印象。和視頻播放器,用戶可以在進入主界面之后根據(jù)自己的需要選擇。

  

【正文】 me = cursor .getString(())。 String sbr = (() 3, ())。 //(, sbr)。 if ((mp3)) { (title)。 (singer)。 (album)。 (size)。 (time)。 (url)。 26 (name)。 (m)。 } else if ((wma)) { (title)。 (singer)。 (album)。 (size)。 (time)。 (url)。 (name)。 (m)。 } } while (())。 } } return musicList。 } 菜單功能 菜單主要提供關于、退出、檢查更新還有音頻播放器和視頻播放器界面切換功能。主要應用 OnCreate()函數(shù)和 intent 廣播事件以及事件監(jiān)聽器完成這部分的功能。在線更新功能需要解析 url地址。 圖 Menu 菜單功能項 27 音樂播放器其他功能 歌詞同步顯示 歌詞同步顯示是利用判斷歌曲播放進度,根據(jù)時間節(jié)點同步更新歌詞片段。用 Notepad++打開 Lrc 歌詞文件 , 是如下定義的: [00:]洪卓立 彌足珍貴 [00:] [00:]作曲: Pan [00:]填詞:周耀輝 [00:]監(jiān)制:廖志華 [00:] [00:]LRC 制作:活在 ?下 : 6313827 [00:] [00:]孩子走過 一轉(zhuǎn)眼發(fā)現(xiàn)會漸老 [00:]時光淌過 街巷見證著故事老 [00:]而我 開始很急躁 [00:]難道快樂過後再得不到 [00:] [00:]泥車駛過 不經(jīng)意拆去了舊鋪 可見每個時間點對應一句歌詞, 只要我們找到準確的時間節(jié)點,把歌詞文件解析后即可顯示在 LrcView 上面。 這里我們調(diào)用 FileInputStream()和 InputStreamReader()來讀取歌詞文件;調(diào)用 BufferedReader 的 readline 方法讀取每一行歌詞。 將 [ ]歌詞時間標記替換成空字符和 @字符,然后分離 @字符, 處理歌詞取得歌詞時間節(jié)點,將時間串添加進列表數(shù)組;如果不存在歌詞文件,捕捉異常 catch (FileNotFoundException e)并輸出相應提示信息。 接下來我們需要解析已獲得的時間字符列表數(shù)組,將 : 和 .用 @字符代替,分離出分、秒并 轉(zhuǎn)化為整型; 計算上一行與下一行的時間轉(zhuǎn)換為毫秒數(shù) ,之后將歌詞和時間都返回。詳細代碼見附錄 B3。 28 圖 歌詞同步顯示 在播放器顯示時,還需要將時間格式進行轉(zhuǎn)換,以 **: **的形式顯示在歌詞面板上。 public String toTime(int time) { time /= 1000。 int minute = time / 60。 int hour = minute / 60。 int second = time % 60。 minute %= 60。 return (%02d:%02d, minute, second)。 } 播放模式切換 播放模式的切換通過監(jiān)聽用戶點擊切換圖片按鈕實現(xiàn),而且不能同時啟動兩種播放模式, 音樂播放器啟動默認為順序播放模式 。 當用戶切換到“單曲循環(huán)”模式時,一直重復播放當前 ID 的歌曲;當切換到“隨機播放”模式時,自動生成同當前播放 ID 不一樣的一個隨機 ID,并且此 ID 不大于列表中最大的 ID 數(shù),Play_next()指向這個隨機 ID,實現(xiàn)隨機播放功能。 圖 音量控制和播放模式切換按鈕 29 在音樂播放器中我們創(chuàng)建一個監(jiān)聽類 OnClickListener 用來監(jiān)聽用戶單擊圖片按鈕事件,當用戶單擊播放模式切換按鈕時在切換模式的同時改變圖片按鈕,方便用戶看到當前的播放模式。 詳細代碼見附錄 2。 甩歌功能 當用戶甩動手機時可以自行切換歌曲,這部分功能代碼如下: //重力感應 甩歌代碼 private static final int SHAKE_THRESHOLD = 3000。 private long lastUpdate=0。 private double last_x=0。 private double last_y= 。 private double last_z=。 //這個控制精度,越小表示反應越靈敏 @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Autogenerated method stub //處理精準度改變 } @Override public void onSensorChanged(SensorEvent event) { // TODO Autogenerated method stub if(()==){ long curTime = ()。 // 每 200 毫秒檢測一次 if ((curTime lastUpdate) 100) { long diffTime = (curTime lastUpdate)。 lastUpdate = curTime。 30 double x=[]。 double y=[]。 double z=[]。 (, x=+x+ y=+y+ z=+z)。 float speed = (float) ((x+y+z last_x last_y last_z) / diffTime * 10000)。 if (speed SHAKE_THRESHOLD) { //檢測到搖晃后執(zhí)行的代碼 if(==true){ Intent intent = new Intent(, )。 (play, pause)。 startService(intent)。 isPlaying = false。 ()。 replaying=false。 } else { Intent intent = new Intent(, )。 (play, playing)。 (id, id)。 startService(intent)。 isPlaying = true。 ()。 replaying=true。 } } last_x = x。 last_y = y。 31 last_z = z。 } } } public ImageView getIcon() { return icon。 } public void setIcon(ImageView icon) { = icon。 } 這里我們調(diào)用 傳感器 類 來感應用戶搖動手機的頻率, 當檢測到搖晃后,執(zhí)行切歌任務。 視頻播放器其他功能 視頻顯示比例的切換 當用戶 雙擊屏幕 時, 可以切換全屏 ,給予用戶更好的視覺體驗。 調(diào)用OnClickListener()方法監(jiān)聽用戶雙擊屏幕 的活動,喚醒全屏 Activity。 32 6 系統(tǒng)測試 這里我主要為我的搭檔做單元測試,完善相關編碼,包括各個界面的切換、播放 控制功能和相關功能的在模擬機和真機上的測試。整個測試過程業(yè)已完畢。 單元測試一 主要在模擬器上測試播放器各個功能的實現(xiàn)情況, 包括界面切換、多媒體文件列表的獲取情況、播放控制功能和相關功能的實現(xiàn)。 及時優(yōu)化相關代碼,并進一步美化各個界面。 以 音樂播放器的 歌詞同步處理類代碼為例, 需要判斷歌詞的進度同歌曲進度一致,歌詞的總時間長度被分割成幾十個不同的節(jié)點,當歌曲播放到一個時間點,跟歌詞處于同一個臨界點時,返回歌詞檢索值,并響應同步顯示歌詞。 // 創(chuàng)建對象 private ListLrcContent lrcList = new ArrayListLrcContent()。 // 初始化歌詞檢索值 private int index = 0。 // 初始化歌曲播放時間的變量 private int CurrentTime = 0。 // 初始化歌曲總時間的變量 private int CountTime = 0。 /** * 歌詞同步處理類 **/ public int LrcIndex() { if (()) { // 獲得歌曲播放在哪的 時間 CurrentTime = ()。 // 獲得歌曲總時間長度 33 CountTime = ()。 } if (CurrentTime CountTime) { for (int i = 0。 i ()。 i++) { if (i () 1) { if (CurrentTime (i).getLrc_time() amp。amp。 i == 0) { index = i。 } if (CurrentTime (i).getLrc_time() amp。amp。 CurrentTime (i + 1).getLrc_time()) { index = i。 } } if (i == () 1 amp。amp。 CurrentTime (i).getLrc_time()) { index = i。 } } } return index。 } 單元測試二 往模擬器的 SD 卡里上傳不同文件類型的媒體文件,測試播放器的功能能否順利實現(xiàn),發(fā)現(xiàn)順序播放時,播放到最后一首的時候播放器異常關閉了,為此我們準備進行一些改進,創(chuàng)建一個監(jiān)聽類,當歌曲播放到最大的 _ID 位置時,當播放完畢前一秒時拋出異常,自行停止播放線程。 將生成的 APK 文件拷貝到真機上安裝,運行并測試甩歌、手機監(jiān)聽等功能。進一步優(yōu)化播放模式切換功能,排除異常隱患;研究視頻軟硬件解碼功能,希望34 在不久的將來能夠?qū)崿F(xiàn)更多不同媒體文件類型的播放功能。 測試用例設計 DDMS 的全稱是 Dalvik Debug Monitor Service,是 Android 開發(fā)環(huán)境中的Dalvik 虛擬機調(diào)試監(jiān)控服務 打開 Eclipse 以后,在右上方有個 DDMS,單擊它彈出一個可視化界面 。 DDMS中的 File Explorer顯示的是當前運行的 Android模擬器內(nèi)嵌的 SDCard文件列表,我們以后所涉及到的 SD 卡文件讀取問題都可通過這里來解決。我們可以通過向模擬器導入文件使程序?qū)崿F(xiàn)相關文件的讀取功能。前面我們已經(jīng)講到了模擬器的創(chuàng)建,在創(chuàng)建的同時我們可以同時給它分配一定的 SDCard 容量。 并且需要在 聲明 SD卡的用戶權限,代碼如下: usespermission android:name=/ usespermission android:name= / usespermission android:name=/ usespermission android:name=/ 這樣就使用戶對虛擬 SD 卡內(nèi)的文件有讀寫功能,如下圖: 圖 虛擬 SD 卡文件結構和權限 35 圖 向 SD 卡導入文件 向虛擬 SD 卡中導入 mp3/wma/mp4/3gp 格式的多個文件,測試整個程序功能的實現(xiàn)情況。 36 7 結論與展望 通過對 Android 手機平臺的多媒體播放器軟件的開發(fā),使我對 Android 多媒體播放器系統(tǒng)的整體設計有一個深入的了解,對整 個流程也會有一個清晰的認識。開發(fā) Android 音樂播放器,要抓住開發(fā)的核心部分,多媒體播放器大體由播放主界面、播放列表、菜單、播放設置、以及個性化功能五大核心組成,只要掌握了這五部分的
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1