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 ! 这个明天再写了 很迟了(嘿嘿)
只写了一个播放功能
上一篇 点击打开链接