您的位置:首页 > 移动开发 > Android开发

Android中的音乐播放

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

 

 





 

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

 

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

 

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);


[code]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();

}

[/code]

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }


      建议在播放音乐的时候把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);



}



});



}



}



.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }


 


播放音乐的Service代码:






package com.yzy.sound;


[code] 


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;

}


 

}

[/code]

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }


 



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: