独立开发音乐播放器3

来源:互联网 发布:json格式数据 编辑:程序博客网 时间:2024/06/05 18:49
package codefans.app.activity;import codefans.app.util.Mp3Util;import codefans.mp3layer.R;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;public class Mp3PlayerActivity extends Activity{private boolean flag = false;  //播放  暂停 变量判断private ImageButton playBt;private SeekBar seekBar;private Intent intent;   //播放信息意图private Bundle bundle;   //意图传递的信息private SeekBarReceiver receiver;private int position;   //播放进度条位置@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);this.playBt = (ImageButton) findViewById(R.id.play);this.seekBar = (SeekBar) findViewById(R.id.seekBar);//意图   启动service使用this.intent = new Intent("codefans.action.Mp3Player");bundle = new Bundle();//注册广播接受器receiver = new SeekBarReceiver();  IntentFilter filter = new IntentFilter();filter.addAction("codefans.intent.action.Mp3Player");this.registerReceiver(receiver, filter);}//播放按钮点击public void mediaPlay(View v){if(flag == false)  //改变播放按钮图标{   playBt.setImageResource(R.drawable.stop);   flag = true;   this.bundle.putString("filePath", "qq.mp3");   this.bundle.putInt("operate", Mp3Util.PLAY);   this.intent.putExtras(bundle);   startService(intent);      }else{ playBt.setImageResource(R.drawable.play); flag = false;  this.bundle.putInt("operate", Mp3Util.STOP); this.intent.putExtras(bundle); startService(intent); }}@Overrideprotected void onDestroy(){this.unregisterReceiver(receiver);  //解除接受广播 super.onDestroy();}/** *   bindService 实现需要  这里使用startservice  * @author Codefans *//启动服务需要类private class MyServiceConnection implements ServiceConnection{public void onServiceConnected(ComponentName name, IBinder service){Mp3PlayerActivity.this.binder = (Player) service;}public void onServiceDisconnected(ComponentName name){Mp3PlayerActivity.this.binder = null;}} *//** * 播放进度条 位置广播接受器 * @author Codefans * */private class SeekBarReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){    Mp3PlayerActivity.this.position = intent.getIntExtra("position", 0);      //  Message msg = new Message();    Mp3PlayerActivity.this.seekBar.setProgress(position);    //    Log.i("result", String.valueOf(position));   }}}


package codefans.app.service;import java.io.File;import java.io.IOException;import codefans.app.util.Mp3Util;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Bundle;import android.os.Environment;import android.os.IBinder;public class Mp3Service extends Service{private MediaPlayer mediaPlayer;private File musicFile;private String name;@Overridepublic void onCreate(){if (this.mediaPlayer == null){this.mediaPlayer = new MediaPlayer();}}@Overridepublic void onDestroy(){if (this.mediaPlayer != null){this.mediaPlayer.stop();this.mediaPlayer.release();this.mediaPlayer = null;}super.onDestroy();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId){Bundle bundle = intent.getExtras();switch (bundle.getInt("operate")){case Mp3Util.PLAY:this.playMusci(bundle.getString("filePath"));break;case Mp3Util.STOP:this.stop();break;}return START_STICKY;}@Overridepublic IBinder onBind(Intent intent){return null;}// 开始播放private void playMusci(String fileName){try{if (fileName.equals(name))  //播放同文件  {this.mediaPlayer.start();}else   //播放不同文件{this.name = fileName;this.musicFile = new File(Environment.getExternalStorageDirectory(), fileName);this.mediaPlayer.reset();this.mediaPlayer.setDataSource(musicFile.getAbsolutePath());this.mediaPlayer.prepare();this.mediaPlayer.setOnPreparedListener(new MyPreParedListenner());Thread t = new SendBroadCastThread();t.start();}}catch (IllegalArgumentException e){e.printStackTrace();}catch (IllegalStateException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}}private void stop() //暂停{this.mediaPlayer.pause();}// mediaPlayer缓存完执行事件private class MyPreParedListenner implements OnPreparedListener{public void onPrepared(MediaPlayer mp){mp.start();}}/** * 发送播放位置线程, 每隔一秒发送一次广播 改变播放器进度条 * @author Codefans * */private class SendBroadCastThread extends Thread{@Overridepublic void run(){while(true){Intent intent = new Intent();intent.putExtra("position", Mp3Service.this.mediaPlayer.getCurrentPosition());intent.setAction("codefans.intent.action.Mp3Player");// action与接收器相同sendBroadcast(intent);  //发送广播try{Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}}}}/** * 新建一个内部类 Activity调用service时返回此binder *  * @author Codefans *  *         private class Mp3IBinder extends Binder implements Player { *  *         public void playMusic(String filePath) { *         Mp3Service.this.playMusci(filePath); } *  *         } */}

代码也不知道怎么发  都发上来了 

   今天主要写了关闭Activity后台依然在唱歌   还有一个就是进度条跟随播放 前进