如题,MediaPlayer的start(),pause(),stop()方法还有和换歌的方法一起怎么实现,要求是读取sdCard中的音乐文件。
解决方案 »
- viewpager嵌套webView滑动问题,如何判断webview滑动至最左或最右
- android中的 单选列表对话框和多选列表对话框 一直出不来
- android 人脸识别
- 高人们,赶紧看看这是啥错呀,
- android SharedPreferences存储问题
- ListView怎么才能让指定的item disable和enable呢?
- 郁闷啊!EditText设置android:ellipsize="marquee"就报IllegalArgumentException
- 监听Settings.System.RINGTONE
- 怎么独立操作listview中指定item中的控件
- app登录后的token安全性问题
- gallery3d 单张浏览模式如何调整图片间距
- android 视频h263编码
public void play(String path,boolean isRun){
if(!isRun){
mMediaPlayer.reset();// 重置
try {
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
mMediaPlayer.start();
}
}
这个方法的参数path 就是你的sd卡的音乐文件路径private void initMediaPlayer(){
if(null == mMediaPlayer){
mMediaPlayer = new MediaPlayer();
MediaPlayer.OnPreparedListener prepareListener = new MediaPlayer.OnPreparedListener(){
public void onPrepared(MediaPlayer mp){
if(playPosition>0){
mp.seekTo(playPosition);
playPosition = 0;
}
mp.start(); //开始播放
mActiv.onPrepare();
}
};
//播放完成
MediaPlayer.OnCompletionListener CompletionListener=new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer arg0) {
mMediaPlayer.stop();
mActiv.onComplete();
}
}; MediaPlayer.OnErrorListener ErrorListener=new MediaPlayer.OnErrorListener(){
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
mMediaPlayer.stop();
// Toast.makeText(MusicActivity.this, MusicActivity.this.getText(R.string.playerError).toString()+what,Toast.LENGTH_SHORT).show();
return true;
}
};
mMediaPlayer.setOnPreparedListener(prepareListener);
mMediaPlayer.setOnCompletionListener(CompletionListener);
mMediaPlayer.setOnErrorListener(ErrorListener);
}
给你的mediaplayer绑定监听器 如上;
public boolean pause(){
boolean ret = mMediaPlayer.isPlaying();
if(ret){
mMediaPlayer.pause();
}
return ret ;
}
public void start(){
if(null != mMediaPlayer){
mMediaPlayer.start();
}
}
public boolean stop(){
boolean ret = mMediaPlayer.isPlaying();
if(ret){
mMediaPlayer.stop();
}
return ret ;
}
大体就是这样吧 提醒你以下 程序activity关闭时记得MediaPalyer.release()方法调用
还有就是最好用service来进行 音乐的播放我把我的service给你:public class PlayService extends Service implements IPlayService{ private ServiceBinder binder = new ServiceBinder();
private Handler serviceHandler ;
private MediaPlayer mMediaPlayer;
private MediaReadActivity mActiv ;
private boolean isAppStart ;
private int playPosition = 0;
SoundPool soundpool ;
private int soundId ;
public boolean isAppStart() {
return isAppStart;
}
public void setAppStart(boolean isAppStart) {
this.isAppStart = isAppStart;
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public class ServiceBinder extends Binder implements IPlayService{
public PlayService getService(){
return PlayService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
initMediaPlayer();
initSoundPool();
}
@Override
public void onDestroy() {
releaseMeidaPlayer();
soundpool.release();
super.onDestroy();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
public Handler getServiceHandler() {
return serviceHandler;
}
public void setServiceHandler(Handler serviceHandler) {
this.serviceHandler = serviceHandler;
}
public MediaReadActivity getActiv() {
return mActiv;
}
public void setActiv(MediaReadActivity mActiv) {
this.mActiv = mActiv;
} public int getPlayPosition() {
return playPosition;
}
public void setPlayPosition(int playPosition) {
this.playPosition = playPosition;
}
private void initSoundPool(){
soundpool = new SoundPool(3, AudioManager.STREAM_MUSIC, 100);
// soundId =soundpool.load(this, R.raw.app_start_music, 1);
soundpool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener(){ @Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
soundpool.play(sampleId, (float)0.5,(float)0.5, 0, 0, 1);
}
});
}
private void initMediaPlayer(){
if(null == mMediaPlayer){
mMediaPlayer = new MediaPlayer();
MediaPlayer.OnPreparedListener prepareListener = new MediaPlayer.OnPreparedListener(){
public void onPrepared(MediaPlayer mp){
if(playPosition>0){
mp.seekTo(playPosition);
playPosition = 0;
}
mp.start(); //开始播放
mActiv.onPrepare();
}
};
//播放完成
MediaPlayer.OnCompletionListener CompletionListener=new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer arg0) {
mMediaPlayer.stop();
mActiv.onComplete();
}
}; MediaPlayer.OnErrorListener ErrorListener=new MediaPlayer.OnErrorListener(){
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
mMediaPlayer.stop();
// Toast.makeText(MusicActivity.this, MusicActivity.this.getText(R.string.playerError).toString()+what,Toast.LENGTH_SHORT).show();
return true;
}
};
mMediaPlayer.setOnPreparedListener(prepareListener);
mMediaPlayer.setOnCompletionListener(CompletionListener);
mMediaPlayer.setOnErrorListener(ErrorListener);
}
}
public void releaseMeidaPlayer(){
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();// 停止
}
mMediaPlayer.reset();
mMediaPlayer.release();
}
public void play(String path,boolean isRun){
if(!isRun){
mMediaPlayer.reset();// 重置
try {
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
mMediaPlayer.start();
}
}
public void playFromAsset(String path ,boolean isRun,AssetManager asm){
if(!isRun){
mMediaPlayer.reset();// 重置
try {
AssetFileDescriptor afd = asm.openFd(path);
mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),afd.getLength());
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
mMediaPlayer.start();
}
}
public boolean stop(){
boolean ret = mMediaPlayer.isPlaying();
if(ret){
mMediaPlayer.stop();
}
return ret ;
}
public void stopWhenEnd(){
mMediaPlayer.stop();
Log.d(">>>>>>>>>>>", "position=="+mMediaPlayer.getCurrentPosition());
}
public boolean pause(){
boolean ret = mMediaPlayer.isPlaying();
if(ret){
mMediaPlayer.pause();
}
return ret ;
}
public void start(){
if(null != mMediaPlayer){
mMediaPlayer.start();
}
}
public boolean isPlaying(){
return mMediaPlayer.isPlaying();
}
public int getDuration(){
return mMediaPlayer.getDuration();
}
public int getCurrentPosition(){
return mMediaPlayer.getCurrentPosition();
}
public void seekTo(int progress){
mMediaPlayer.seekTo(progress);
}
public void setDisplay(SurfaceHolder holder){
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDisplay(holder);//设置Video影片以SurfaceHolder播放
}
public void release(){
mMediaPlayer.release();
}
public void playWhenAppStart(){
soundId =soundpool.load(this, R.raw.app_start_music, 1);
Log.d(">>>>>>>>>>>>>>", "soundpool.........");
}
public void setVolume(float lv,float rv){
mMediaPlayer.setVolume(lv, rv);
}
}有一个叫做LiteListen的开源播放器 你找找 ,可以参考
mMediaPlayer.setDataSource(path);
mMediaPlayer.setOnCompletionListener(mCompleteListener);
mMediaPlayer.setLooping(false);
mMediaPlayer.prepare();
重新设置一下dataSource 监听播放完事件用 setOnCompletionListener