Android中的音乐播放

      在Android平台下,要实现声音的播放是十分容易实现的,只要生成一个MediaPlayer对象,并调用它的相关方法,就能改变对声音播放进行控制。MediaPlayer对象有一下各种状态:

 

 

mediaplayer_state_diagram

 

     熟悉了MediaPlayer对象的各种状态后以及转换条件,就能很好的控制媒体播放。

 

   例如:播放res/raw文件夹中的歌曲十分简单,只需写如下代码:

 

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();
 
   也可以指定音乐文件的位置来进行播放,例如,在sdcard根目录下有有一首歌曲:test.mp3。则可以这样播放:
        MediaPlayer mp = new MediaPlayer();
        String song = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.mp3";
        try {
            mp.setDataSource(song);
            mp.prepare();
            mp.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

      建议在播放音乐的时候把MediaPlayer放在Service中,因为如果放在Activity中会使得界面特别卡。而且音乐不能放到后台里播放,一旦退出Activity,音乐就会暂停播放。

      可以在Activity中布局相关的界面,例如按钮等。然后通过这个Activitiy来启动这个Service。要通过UI与Service交互,可以通过Intent对象传递消息。更复杂一些,要实现Service向Activity发送消息,并利用这些消息来更新UI,这可以用广播机制,例如告诉Activity是否正在播放,播放进度,当前播放歌曲条目等信息。

 

 例如以下实例代码:

  /*Activity中*/

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnPlay = (Button)findViewById(R.id.btnPlay);
        btnPause = (Button)findViewById(R.id.btnPause);
        btnPlay.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,SoundService.class);
                intent.putExtra("playing", true);
                startService(intent);
            }
        });
        
        btnPause.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,SoundService.class);
                intent.putExtra("playing", false);
                startService(intent);
            }
        });
    }
}

 

播放音乐的Service代码:

package com.yzy.sound;
 
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
 
public class SoundService extends Service {
    private MediaPlayer mp;
 
    @Override
    public void onCreate() {
        super.onCreate();
        mp = MediaPlayer.create(this, R.raw.test);
    }
 
    @Override
    public void onDestroy() {
        super.onDestroy();
        mp.release();
        stopSelf();
    }
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        boolean playing = intent.getBooleanExtra("playing", false);
        if (playing) {
            mp.start();
        } else {
            mp.pause();
        }
        return super.onStartCommand(intent, flags, startId);
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
 
}
 
 
posted @ 2011-09-15 17:41  图形学小菜鸟  阅读(25631)  评论(5编辑  收藏  举报