package codefans.app.service;import java.io.File;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Binder;import android.os.Environment;import android.os.IBinder;public class Mp3Service extends Service{private IBinder myBinder = new Mp3IBinder();private MediaPlayer mediaPlayer; private File musicFile;@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 IBinder onBind(Intent intent){return myBinder;}//開始播放private void playMusci(String fileName){try{this.musicFile = new File(Environment.getExternalStorageDirectory(), fileName);this.mediaPlayer.setDataSource(musicFile.getAbsolutePath());this.mediaPlayer.prepare();this.mediaPlayer.setOnPreparedListener(new MyPreParedListenner());}catch (IllegalArgumentException e){e.printStackTrace();}catch (IllegalStateException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}}//mediaPlayer緩衝完執行事件private class MyPreParedListenner implements OnPreparedListener{public void onPrepared(MediaPlayer mp){Mp3Service.this.mediaPlayer.start();}}/** * 建立一個內部類 Activity調用service時返回此binder * @author Codefans */private class Mp3IBinder extends Binder implements Player{public void playMusic(String filePath){Mp3Service.this.playMusci(filePath);}}}
service 播放功能
package codefans.app.activity;import codefans.app.service.Player;import codefans.mp3layer.R;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.widget.ImageButton;public class Mp3PlayerActivity extends Activity{private boolean flag = false;private ImageButton playBt;private Player binder;private ServiceConnection myServiceConnection = new MyServiceConnection();/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);this.playBt = (ImageButton) findViewById(R.id.play);Intent intent = new Intent("codefans.action.Mp3Player");bindService(intent, myServiceConnection, Context.BIND_AUTO_CREATE);}//播放按鈕點擊public void mediaPlay(View v){if(flag == false) //改變播放按鈕表徵圖{ playBt.setImageResource(R.drawable.stop); flag = true; this.binder.playMusic("qq.mp3"); }else{ playBt.setImageResource(R.drawable.play); flag = false;}}@Overrideprotected void onDestroy(){unbindService(myServiceConnection);super.onDestroy();}//啟動服務需要類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;}}}
這裡用bindservice 好像不行,因為這樣如果掛掉Activity 那個service服務也停止了 應該用startservice ! 這個明天再寫了 很遲了(嘿嘿)
唯寫了一個播放功能
上一篇 點擊開啟連結