Android多媒体-MediaPlayer使用方式
2014-06-09 17:05
183 查看
先不多说,直接上代码
public class SimpleMediaPlayerActivity extends Activity {
//private static final Uri mMusicUri = Uri.fromFile(new File("/sdcard/sound_file_1.mp3"));
private static final Uri mMusicUri = Uri.parse("http://czanxi.azone.artron.net/users_info/88/czanxi/2009121322260351292.mp3");
private MediaPlayer mMediaPlayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
playMusic1();
}
/**
* 第一种方式,通过create创建
*/
private void playMusic1() {
stopCurrentMediaPlayer();
mMediaPlayer = MediaPlayer.create(this, mMusicUri); //prepared
mMediaPlayer.start(); // no need to call prepare(); create() does that for you
}
/**
* 第二种方式,通过new MediaPlayer()创建,通过prepare
*/
private void playMusic2() {
stopCurrentMediaPlayer();
mMediaPlayer = new MediaPlayer(); //idle
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.start();
}
/**
* 第三种方式,通过new MediaPlayer()创建,通过prepareAsync
*/
private void playMusic3() {
mMediaPlayer = new MediaPlayer() ;
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC) ;
mMediaPlayer.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start() ;
}
}) ;
try {
mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri);
mMediaPlayer.prepareAsync() ;//异步加载
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
stopCurrentMediaPlayer();
super.onDestroy();
}
private void stopCurrentMediaPlayer() {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
}
}
第一种方式和二、三中的区别是:
new 之后是idle状态 ,create之后是 prepared状态。这也是为何我们在调用create之后不需要再手动调用prepare()方法去更改状态。
第一种、第二种和第三种的区别是:
前两种为同步方式,因为涉及到识别及解码等IO耗时操作,容易引起主线程堵塞。第三种为异步方式,不会引发此问题,推荐此方式。
public class SimpleMediaPlayerActivity extends Activity {
//private static final Uri mMusicUri = Uri.fromFile(new File("/sdcard/sound_file_1.mp3"));
private static final Uri mMusicUri = Uri.parse("http://czanxi.azone.artron.net/users_info/88/czanxi/2009121322260351292.mp3");
private MediaPlayer mMediaPlayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
playMusic1();
}
/**
* 第一种方式,通过create创建
*/
private void playMusic1() {
stopCurrentMediaPlayer();
mMediaPlayer = MediaPlayer.create(this, mMusicUri); //prepared
mMediaPlayer.start(); // no need to call prepare(); create() does that for you
}
/**
* 第二种方式,通过new MediaPlayer()创建,通过prepare
*/
private void playMusic2() {
stopCurrentMediaPlayer();
mMediaPlayer = new MediaPlayer(); //idle
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.start();
}
/**
* 第三种方式,通过new MediaPlayer()创建,通过prepareAsync
*/
private void playMusic3() {
mMediaPlayer = new MediaPlayer() ;
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC) ;
mMediaPlayer.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start() ;
}
}) ;
try {
mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri);
mMediaPlayer.prepareAsync() ;//异步加载
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
stopCurrentMediaPlayer();
super.onDestroy();
}
private void stopCurrentMediaPlayer() {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
}
}
第一种方式和二、三中的区别是:
new 之后是idle状态 ,create之后是 prepared状态。这也是为何我们在调用create之后不需要再手动调用prepare()方法去更改状态。
第一种、第二种和第三种的区别是:
前两种为同步方式,因为涉及到识别及解码等IO耗时操作,容易引起主线程堵塞。第三种为异步方式,不会引发此问题,推荐此方式。
相关文章推荐
- Android MediaPlayer基本使用方式
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- Anroid学习——Android MediaPlayer基本使用方式
- 【Android笔记】MediaPlayer基本使用方式
- Android MediaPlayer基本使用方式
- 【Android笔记】MediaPlayer基本使用方式
- 对象方法Android之多媒体使用——MediaPlayer播放音频
- 【Android笔记】MediaPlayer基本使用方式
- 01.Android之多媒体--使用MediaPlayer播放音频02
- 【Android笔记】MediaPlayer基本使用方式
- 从头学Android之多媒体--使用MediaPlayer播放音频
- Android MediaPlayer基本使用方式
- 从头学Android之多媒体--使用MediaPlayer播放音频
- Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用
- 24、从头学Android之多媒体--使用MediaPlayer播放音频
- Android MediaPlayer基本使用方式
- Android开发--多媒体应用开发(一)--MediaPlayer的使用介绍
- Android MediaPlayer基本使用方式
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- Android MediaPlayer基本使用方式