1.接下来在Mp3Demo.java中输入以下代码:
package com.example.mp3demo
import android.media.MediaPlayer
import android.os.Bundle
import android.app.Activity
import android.view.View
import android.view.View.OnClickListener
import android.widget.Button
import android.widget.TextView
public class Mp3Demo extends Activity
{ //声名变量
private Button start=null
private Button pause=null
private Button stop=null
private TextView state=null
private MediaPlayer mp3
private Boolean flag=false//设置标记,false表示正在播放
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState)
super.setContentView(R.layout.activity_mp3_demo)
//取得各按钮组件
start=(Button) super.findViewById(R.id.start)
pause=(Button) super.findViewById(R.id.pause)
stop=(Button) super.findViewById(R.id.stop)
state=(TextView)super.findViewById(R.id.state)
//为每个按钮设置单击事件
start.setOnClickListener(new OnClickListenerStart())
pause.setOnClickListener(new OnClickListenerPause())
stop.setOnClickListener(new OnClickListenerStop())
mp3= new MediaPlayer() //创建一个MediaPlayer对象
//在res下新建一个raw文件夹把一首歌放到此文件夹中并用英文命名
mp3 = MediaPlayer.create(Mp3Demo.this,R.raw.sky)
}
//各按钮单击事件的实现如下
//开始播放
private class OnClickListenerStart implements OnClickListener{
//implementsOnClickListener为实现OnClickListener接口
@Override
//重写onClic事件
public void onClick(View v)
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
try
{
if (mp3!=null)
{
mp3.stop()
}
mp3.prepare()//进入到准备状态
mp3.start() //开始播放
state.setText("Playing") //改变输出信息为“Playing”,下同
} catch (Exception e)
{
state.setText(e.toString())//以字符串的形式输出异常
e.printStackTrace() //在控制台(control)上打印出异常
}
}
}
//暂停播放
private class OnClickListenerPause implements OnClickListener{
@Override
public void onClick(View v)
{
try
{
if (flag==false) //若flag为false,则表示此时播放器的状态为正在播放
{
mp3.pause()
flag=true
state.setText("pause")
}
else if(flag==true){
mp3.start() //开始播放
flag=false//重新设置flag为false
state.setText("Playing")
}
} catch (Exception e)
{
state.setText(e.toString())
e.printStackTrace()
}
}
}
//停止播放
private class OnClickListenerStop implements OnClickListener{
@Override
public void onClick(View v)
{
try
{
if (mp3!=null)
{
mp3.stop()
state.setText("stop")
}
} catch (Exception e)
{
state.setText(e.toString())
e.printStackTrace()
}
}
}
//重写暂停状态事件
protected void onPause(){
try
{
mp3.release() //释放音乐资源
} catch (Exception e)
{
state.setText(e.toString())
e.printStackTrace()
}
super.onPause()
}
}
2.按下来是定义布局文件,代码如下:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="start"/>
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="pause"/>
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stop"/>
在Android平台下,要实现声音的播放是十分容易实现的,只要生成一个MediaPlayer对象,并调用它的相关方法,就能改变对声音播放进行控制。MediaPlayer对象有一下各种状态:
熟悉了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
}
}
new一个MediaPlayer mp对象,有个方法:mp.setDataSource(音乐路径),然后mp.prepare()mp.start()想播放apk里面的音乐就mp=MediaPlayer.create(this, R.raw.音乐名), mp.prepare() mp.start()欢迎分享,转载请注明来源:内存溢出
评论列表(0条)