安卓Android廣播、線程、服務(wù)與多媒體開發(fā)實(shí)驗(yàn)報(bào)告參考模板_第1頁
安卓Android廣播、線程、服務(wù)與多媒體開發(fā)實(shí)驗(yàn)報(bào)告參考模板_第2頁
安卓Android廣播、線程、服務(wù)與多媒體開發(fā)實(shí)驗(yàn)報(bào)告參考模板_第3頁
安卓Android廣播、線程、服務(wù)與多媒體開發(fā)實(shí)驗(yàn)報(bào)告參考模板_第4頁
安卓Android廣播、線程、服務(wù)與多媒體開發(fā)實(shí)驗(yàn)報(bào)告參考模板_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí) 驗(yàn) 報(bào) 告(2013/2014學(xué)年 第一學(xué)期)課程名稱軟件技術(shù)系列課程(Android基礎(chǔ))實(shí)驗(yàn)名稱Android廣播、線程、服務(wù)與多媒體開發(fā)實(shí)驗(yàn)時(shí)間2013年12月9日指導(dǎo)單位計(jì)算機(jī)學(xué)院、誠邁科技(南京)公司指導(dǎo)教師學(xué)生姓名班級學(xué)號(hào)學(xué)院(系)計(jì)算機(jī)學(xué)院專 業(yè)軟件工程(計(jì)算機(jī)軟件與服務(wù)外包)成 績批閱人王彥日期2013-12-091 / 11實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)名稱Android廣播、線程、服務(wù)與多媒體開發(fā)指導(dǎo)教師實(shí)驗(yàn)類型實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí)4實(shí)驗(yàn)時(shí)間2013-12-9一、 實(shí)驗(yàn)?zāi)康暮鸵篁?yàn)證Broadcast的發(fā)送與接收驗(yàn)證多線程間的數(shù)據(jù)傳遞驗(yàn)證Service的使用方法驗(yàn)證多媒體開發(fā)中音頻、視頻、

2、或圖像的采集與播放編寫一個(gè)Android小程序要求:1、使用廣播傳遞數(shù)據(jù)或信息2、使用多線程3、適當(dāng)應(yīng)用Service4、實(shí)現(xiàn)至少一種多媒體功能 二、 實(shí)驗(yàn)環(huán)境(實(shí)驗(yàn)設(shè)備) PC(Window7)、Eclipse3、 實(shí)驗(yàn)原理及內(nèi)容在這個(gè)程序中涉及到了Receiver和BroadcastReceiver的結(jié)合使用,首先在AndroidManifest.xml中注冊Receiver,實(shí)現(xiàn)能夠在后臺(tái)播放音樂的功能。 通過CommandReceiver類實(shí)現(xiàn)接受前臺(tái)Activity發(fā)送的播放命令的Intent。在CommandReceiver類中,有后臺(tái)Service注冊的接受前臺(tái)控制命令I(lǐng)nten

3、t的Receiver,廣播播放狀態(tài)變化的Intent代碼public class MusicService extends Service implements Runnable private MediaPlayer player;private List<Music> lists;public static int _id = 1; / 當(dāng)前播放位置public static Boolean isRun = true;public LrcProcess mLrcProcess;public LrcView mLrcView;public static int playing_i

4、d = 0;public static Boolean playing = false;Overridepublic IBinder onBind(Intent arg0) / TODO Auto-generated method stubreturn null;Overridepublic void onCreate() / TODO Auto-generated method stublists = MusicList.getMusicData(getApplicationContext();SeekBarBroadcastReceiver receiver = new SeekBarBr

5、oadcastReceiver();IntentFilter filter = new IntentFilter(".karl.seekBar");this.registerReceiver(receiver, filter);new Thread(this).start();super.onCreate();Overridepublic void onStart(Intent intent, int startId) / TODO Auto-generated method stubString play = intent.getStringExtra("pla

6、y");_id = intent.getIntExtra("id", 1);if (play.equals("play") if (null != player) player.release();player = null;playMusic(_id); else if (play.equals("pause") if (null != player) player.pause(); else if (play.equals("playing") if (player != null) player.s

7、tart(); else playMusic(_id); else if (play.equals("replaying") else if (play.equals("first") int id = intent.getIntExtra("id", 0);playMusic(id); else if (play.equals("rewind") int id = intent.getIntExtra("id", 0);playMusic(id); else if (play.equals(&

8、quot;forward") int id = intent.getIntExtra("id", 0);playMusic(id); else if (play.equals("last") int id = intent.getIntExtra("id", 0);playMusic(id);private void playMusic(int id) / / 初始化歌詞配置 / /mLrcProcess = new LrcProcess();/ 讀取歌詞文件mLrcProcess.readLRC(lists.get(_id

9、).getUrl();/ 傳回處理后的歌詞文件lrcList = mLrcProcess.getLrcContent();MusicActivity.lrc_view.setSentenceEntities(lrcList);/ 切換帶動(dòng)畫顯示歌詞MusicActivity.lrc_view.setAnimation(AnimationUtils.loadAnimation(MusicService.this, R.anim.alpha_z);/ 啟動(dòng)線程mHandler.post(mRunnable);/ / 初始化歌詞配置 / /if (null != player) player.rel

10、ease();player = null;if (id >= lists.size() - 1) _id = lists.size() - 1; else if (id <= 0) _id = 0;Music m = lists.get(_id);String url = m.getUrl();Uri myUri = Uri.parse(url);player = new MediaPlayer();player.reset();player.setAudioStreamType(AudioManager.STREAM_MUSIC);try player.setDataSource

11、(getApplicationContext(), myUri);player.prepare(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (SecurityException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalStateException e) / TODO Auto-generated catch blocke.printStackT

12、race(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();player.start();player.setOnCompletionListener(new OnCompletionListener() Overridepublic void onCompletion(MediaPlayer mp) / TODO Auto-generated method stub/ 下一首if (MusicActivity.isLoop = true) player.reset();Intent in

13、tent = new Intent("pletion");sendBroadcast(intent);_id = _id + 1;playMusic(_id); else / 單曲播放player.reset();Intent intent = new Intent("pletion");sendBroadcast(intent);playMusic(_id););player.setOnErrorListener(new OnErrorListener() Overridepublic boolean onError(MediaPlayer mp, i

14、nt what, int extra) / TODO Auto-generated method stubif (null != player) player.release();player = null;Music m = lists.get(_id);String url = m.getUrl();Uri myUri = Uri.parse(url);player = new MediaPlayer();player.reset();player.setAudioStreamType(AudioManager.STREAM_MUSIC);try player.setDataSource(

15、getApplicationContext(), myUri);player.prepare(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (SecurityException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalStateException e) / TODO Auto-generated catch blocke.printStackTr

16、ace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();player.start();return false;);private class SeekBarBroadcastReceiver extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent intent) / TODO Auto-generated method stubint seekBarPosition = intent

17、.getIntExtra("seekBarPosition", 0);/ System.out.println("-"+seekBarPosition);player.seekTo(seekBarPosition * player.getDuration() / 100);player.start();Overridepublic void run() / TODO Auto-generated method stubwhile (isRun) try Thread.sleep(200); catch (InterruptedException e) /

18、 TODO Auto-generated catch blocke.printStackTrace();if (null != player) int position = player.getCurrentPosition();int total = player.getDuration();Intent intent = new Intent(".gress");intent.putExtra("position", position);intent.putExtra("total", total);sendBro

19、adcast(intent);if (null != player) if (player.isPlaying() playing = true; else playing = false;Handler mHandler = new Handler();/ 歌詞滾動(dòng)線程Runnable mRunnable = new Runnable() Overridepublic void run() / TODO Auto-generated method stubMusicActivity.lrc_view.SetIndex(LrcIndex();MusicActivity.lrc_view.inv

20、alidate();mHandler.postDelayed(mRunnable, 100);/ 創(chuàng)建對象private List<LrcContent> lrcList = new ArrayList<LrcContent>();/ 初始化歌詞檢索值private int index = 0;/ 初始化歌曲播放時(shí)間的變量private int CurrentTime = 0;/ 初始化歌曲總時(shí)間的變量private int CountTime = 0;/* * 歌詞同步處理類 */public int LrcIndex() if (player.isPlaying() / 獲得歌曲播放在哪的時(shí)間CurrentTime = player.getCurrentPosition();/ 獲得歌曲總時(shí)間長度CountTime = player.getDuration();if (CurrentTime < CountTime) for (int i = 0; i < lrcList.size(); i+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論