以前看到用AIDl的方法,以爲還不錯。但偶然看到一種,感受簡單,但原理差很少。貼上代碼你們體會下吧!ide
public class AudioService extends Service implements MediaPlayer.OnCompletionListener{
MediaPlayer player;
private final IBinder binder = new AudioBinder();
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return binder;
}
/**
* 當Audio播放完的時候觸發該動做
*/
@Override
public void onCompletion(MediaPlayer player) {
// TODO Auto-generated method stub
stopSelf();//結束了,則結束Service
}
//在這裏咱們須要實例化MediaPlayer對象
public void onCreate(){
super.onCreate();
//咱們從raw文件夾中獲取一個應用自帶的mp3文件
player = MediaPlayer.create(this, R.raw.tt);
player.setOnCompletionListener(this);
}
/**
* 該方法在SDK2.0纔開始有的,替代原來的onStart方法
*/
public int onStartCommand(Intent intent, int flags, int startId){
if(!player.isPlaying()){
player.start();
}
return START_STICKY;
}
public void onDestroy(){
//super.onDestroy();
if(player.isPlaying()){
player.stop();
}
player.release();
}
//爲了和Activity交互,咱們須要定義一個Binder對象
class AudioBinder extends Binder{
//返回Service對象
AudioService getService(){
return AudioService.this;
}
}
//後退播放進度
public void haveFun(){
if(player.isPlaying() && player.getCurrentPosition()>2500){
player.seekTo(player.getCurrentPosition()-2500);
}
}
}this
下面是activity:對象
public class BackgroundAudioDemo extends Activity {
private AudioService audioService;
//使用ServiceConnection來監聽Service狀態的變化
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
audioService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
//這裏咱們實例化audioService,經過binder來實現
audioService = ((AudioService.AudioBinder)binder).getService();
}
};
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.back_audio);
}
public void onClick(View v){
int id = v.getId();
Intent intent = new Intent();
intent.setClass(this, AudioService.class);
if(id == R.id.btn_start){
//啓動Service,而後綁定該Service,這樣咱們能夠在同時銷燬該Activity,看看歌曲是否還在播放
//startService(intent);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
// finish();
}else if(id == R.id.btn_end){
//結束Service
unbindService(conn);
stopService(intent);
finish();
}else if(id == R.id.btn_fun){
audioService.haveFun();
}
}
}
get