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;
@Override
public void onCreate()
{
if(this.mediaPlayer == null)
{
this.mediaPlayer = new MediaPlayer();
}
}
@Override
public void onDestroy()
{
if(this.mediaPlayer != null)
{
this.mediaPlayer.stop();
this.mediaPlayer.release();
this.mediaPlayer = null;
}
super.onDestroy();
}
@Override
public 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. */
@Override
public 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;
}
}
@Override
protected 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 ! 這個明天再寫了 很遲了(嘿嘿)
只寫了一個播放功能
上一篇 點擊打開鏈接