欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【android學(xué)習(xí)之十四】——多媒體1:音樂播放

系統(tǒng) 2971 0

聲明:學(xué)習(xí)的書籍《Android應(yīng)用開發(fā)揭秘》,這里記錄學(xué)習(xí)該書籍的日志,引用的相關(guān)代碼與總結(jié)描述,沒有商業(yè)的用途,完全是自我學(xué)習(xí)的一個記錄,剛剛學(xué)習(xí)不可避免會出現(xiàn)很多問題,若是有錯誤還請大家多多批評。

今天開始學(xué)習(xí)多媒體相關(guān)的操作,因為我們的智能手機一部分重要的作用就是播放音頻,視頻,顯示圖片等操作。Android主要是通過Open Core作為多媒體框架的核心,也被稱作為PV,支持多種格式的音頻,視頻。Open Core框架主要包含兩部分:

(1) PVPlayer:提供媒體播放器功能。

(2) PVAuthor:提供媒體流記錄的功能,完成各種音頻,視頻的流以及圖像的捕捉功能。

當(dāng)然我們開發(fā)中,不會直接操作底層的PV,主要使用Android提供的Media API。

1. MediaPlayer類

該類主要用來播放,音頻,視頻和流媒體,包含了Audio和Video的播放功能,具體的生命周期與相關(guān)方法,可以參考下面音樂播放實例。

2. MediaRecorder類

該類主要用于媒體的采樣,包括音頻視頻。MediaRecorder作為狀態(tài)機運行,需要設(shè)置不同的,比如源設(shè)備和格式。設(shè)置后,可以執(zhí)行任何時間長度的錄制,直到用戶停止。

一、多媒體之音樂播放

下面就以音樂播放的例子來驗證MediaPlayer的生命周期以及相關(guān)方法,關(guān)于音樂播放其實之前例子已經(jīng)實現(xiàn),當(dāng)時是播放的raw目錄下得mp3文件,本例子自動播放SDCard下的mp3例子。

關(guān)鍵源碼:

    public class SDCardMusicPlayActivity extends ListActivity {
	private ImageButton mFrontImageButton = null;
	private ImageButton	mStopImageButton	= null;
	private ImageButton	mStartImageButton	= null;
	private ImageButton	mPauseImageButton	= null;
	private ImageButton	mNextImageButton	= null;
	
	public MediaPlayer mMediaPlayer = null;		//MediaPlayer對象
	private List<String> mMusicList = new ArrayList<String>();//播放列表
	private int currentListItem = 0;			//當(dāng)前播放歌曲的索引
	private static final String MUSIC_PATH = new String("/mnt/sdcard/");//音樂的路徑

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        musicList();							//更新顯示播放列表
        mMediaPlayer = new MediaPlayer();		
        mFrontImageButton = (ImageButton) findViewById(R.id.LastImageButton); 
		mStopImageButton = (ImageButton) findViewById(R.id.StopImageButton);
		mStartImageButton = (ImageButton) findViewById(R.id.StartImageButton); 
		mPauseImageButton = (ImageButton) findViewById(R.id.PauseImageButton);
		mNextImageButton = (ImageButton) findViewById(R.id.NextImageButton); 
		
		//停止按鈕
		mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {
			public void onClick(View v) {
				if(mMediaPlayer.isPlaying()){	//當(dāng)前是否正在播放
					mMediaPlayer.reset();		//重置MediaPlayer到初始狀態(tài)
				}
			}
		});
		//開始按鈕
		mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {
			public void onClick(View v) {
				playMusic(MUSIC_PATH + mMusicList.get(currentListItem));
			}
		});
		//暫停按鈕
		mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() {
			public void onClick(View v) {
				if(mMediaPlayer.isPlaying()){
					mMediaPlayer.pause();
				}else{
					mMediaPlayer.start();
				}
			}
		});
		//下一首
		mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() {
			public void onClick(View arg0){
				nextMusic();
			}
		});
		//上一首
		mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {
			public void onClick(View arg0){
				FrontMusic();
			}
		});
    }

    //播放列表
	private void musicList() {
		//取得指定位置的文件,設(shè)置顯示到播放列表
		File home = new File(MUSIC_PATH);
		if(home.list(new MusicFilter()).length > 0){
			for(File file : home.listFiles(new MusicFilter())){
				mMusicList.add(file.getName());
			}
			ArrayAdapter<String> musicListAdapter = new ArrayAdapter<String>(SDCardMusicPlayActivity.this, R.layout.musicitme, mMusicList);
			this.setListAdapter(musicListAdapter);
		}
	}
	
	private void playMusic(String path){
		try {
			mMediaPlayer.reset();//重置MediaPlayer
			mMediaPlayer.setDataSource(path);//設(shè)置要播放的文件路徑
			mMediaPlayer.prepare();//準(zhǔn)備播放
			mMediaPlayer.start();
			mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
				public void onCompletion(MediaPlayer mp) {
					// TODO Auto-generated method stub
					nextMusic();//播放完成一首之后進行下一首
				}
			});
		} catch (IOException e) {
			// TODO: handle exception
		}
	}
	
	//下一首
	private void nextMusic() {
		// TODO Auto-generated method stub
		if(++currentListItem >= mMusicList.size()){
			currentListItem = 0;
		}else{
			playMusic(MUSIC_PATH + mMusicList.get(currentListItem));
		}
	}
	
	//上一首 
	private void FrontMusic(){
		if (--currentListItem >= 0){
			currentListItem = mMusicList.size();
		}else{
			playMusic(MUSIC_PATH + mMusicList.get(currentListItem));
		}
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event){
		if ( keyCode ==  KeyEvent.KEYCODE_BACK){
			mMediaPlayer.stop();
			mMediaPlayer.release();
			this.finish();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
	
	//播放被點擊的音樂 
	protected void onListItemClick(ListView l, View v, int position, long id){
		currentListItem = position;
		playMusic(MUSIC_PATH + mMusicList.get(position));
	}

}

class MusicFilter implements FilenameFilter{

	@Override
	public boolean accept(File dir, String filename) {
		//這里還可以設(shè)置其他格式的音樂文件
		return (filename.endsWith(".mp3"));
	}
	
}
  

運行效果:

【android學(xué)習(xí)之十四】——多媒體1:音樂播放

【遇到問題】

在往模擬器的SDCard里放置mp3文件的時候,報:Failed to push selection: Read-only file system 錯誤。

切換到DDMS視圖下,看到mnt下的sdcard文件夾的操作權(quán)限為可讀,后來在AVD Edit的時候,之前SDCard沒設(shè)置大小,所以設(shè)置了大小重新啟動AVD,該sdcard文件夾就可以可以編輯的了。


【android學(xué)習(xí)之十四】——多媒體1:音樂播放


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 就去色成人网 | 亚洲精品影院 | 久久久久一区二区三区 | 色天堂影院 | 成人黄色在线 | 色播视频在线播放 | 成人高清网站 | 日韩在线1 | 日本肥老太成熟 | 久久九九国产精品 | 国产综合久久久久影院 | 四虎1515hh精品影库 | 中国妞xxx| 2017最新h无码动漫 | 久久久久久久一区二区 | 99久久精约久久久久久清纯 | 欧美不卡视频一区发布 | 日韩亚洲一区中文字幕在线 | 亚洲欧美中文字幕 | 91久久精品一区二区二区 | 成人一区专区在线观看 | 四影虎影ww4hu55.com | 免费人成在线播放 | 欧美精品国产精品 | 欧美成免费| 久操热久操 | 奇米影视欧美 | 成人国内精品久久久久影院 | 国产亚洲综合久久 | 亚洲精品无码国产爽快A片百度 | 偿还的影视高清在线观看 | 色呦呦在线观看视频 | 久久久久欧美精品网站 | 好大好爽快点视频 | 韩国日本在线 | 亚洲精品久久久久无码AV片软件 | 欧美一级做a爰片免费视频 亚洲男人的天堂久久精品 色吟av | 一级毛片ab片高清毛片 | 国产99久久亚洲综合精品 | 久久91精品 | 精品亚洲福利一区二区 |