这个播放器主要利用service组件实现的后台播放。
点“播放”音乐开始播放,点“暂停”音乐暂停并可以再点击“播放”时继续播放音乐,点“停止”音乐停止并在点“播放”时重新播放音乐,点“退出”音乐停止并退出当前页面。
需要先在res目录下新建一个文件raw文件(其他文件名可能会出错),然后在那目录下放好音乐。
响应按键并传递信息的java代码
package com.example.mp3_zzl;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View zzl){
Intent serviceIntent=new Intent(MainActivity.this, mp3.class);
int fvk=-1;
switch (zzl.getId()) {
case R.id.btn_start:
fvk=1;
break;
case R.id.btn_pause:
fvk=2;
break;
case R.id.btn_stop:
fvk=3;
break;
case R.id.btn_exit:
fvk=4;
stopService(serviceIntent);
MainActivity.this.finish();
break;
default:
break;
}
Bundle bundle=new Bundle(); //new一个bundle 相当于新建一个袋子
bundle.putInt("msg", fvk); //把响应按钮相应的值放入bundle
serviceIntent.putExtras(bundle); //把袋子bundle放入适配器serviceIntent
startService(serviceIntent); //启动service后台服务组件
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
package com.example.mp3_zzl;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.IBinder;
public class mp3 extends Service {
private MediaPlayer mp;
@Override
public void onCreate() {
// TODO 自动生成的方法存根
if(mp==null){
mp=mp.create(mp3.this, R.raw.abc);
mp.setLooping(false); //不重复播放歌曲
}
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO 自动生成的方法存根
Bundle bundle=intent.getExtras();
int fvk=bundle.getInt("msg");
switch (fvk) {
case 1:
play();
break;
case 2:
pause();
break;
case 3:
stop();
break;
default:
break;
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO 自动生成的方法存根
return null;
}
@Override
public void onDestroy() {
// TODO 自动生成的方法存根
if (mp!=null){
mp.stop();
mp.release(); //释放资源
}
super.onDestroy();
}
private void play() {
if(!mp.isPlaying()){
mp.start();
}
}
private void pause() {
if(mp!=null&&mp.isPlaying()){
mp.pause();
}
}
private void stop(){
if(mp!=null){
mp.stop();
mp=mp.create(mp3.this, R.raw.abc); //stop()类调用以后整个生命周期就停止,要从新加载MP3文件才能播放
}
}
}
1:重点利用好onCreate(),onStart(),onDestroy()。
2:写程序时重点思考如何实现自己想要的功能和操作。