欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 国产精品主播视频 | www中文字幕 | 你下面好大好硬好想要 | 亚洲一区二区三区中文字幕 | 日韩第一 | 国产精品片aa在线观看 | v视界成人影院在线视频 | 亚洲综合色网站 | 奇米一区二区 | gogo全球大胆高清人露出91 | 国产伦精品一区二区三区精品视频 | 国产精品成人观看视频国产 | 国产牛仔裤系列在线观看 | 亚洲网站免费观看 | 青青草国产 | 国产精品免费一级在线观看 | 国产高清一区二区 | 看一下毛片 | www.99精品视频在线播放 | 久久久久国产精品美女毛片 | 99视频这里有精品 | 夜夜骚| 国产一区网址 | 日本在线播放一区二区 | 少妇特黄A片一区二区三区免费看 | 成人毛片免费网站 | 中文字幕在线一区二区三区 | 欧美性猛交xxxx乱大交蜜桃 | 国产精品黄网站免费进入 | 在线视频国产一区 | 日本在线播放一区 | 羞羞视频在线免费 | 亚洲精品AV无码永久无码 | av大片| 狠狠色狠狠色综合久久第一次 | 久久精品国产第一区二区 | 亚洲国产日韩在线观看 | 澳门一级淫片免费视频 | 欧美日韩国产一区二区三区不卡 | 欧美一级高清毛片aaa | 免费看的久久久久 |