package com.example.test1;
public interface IPlayer
{
void play();
void stop();
String getStatus();
}
package com.example.test1;
import android.os.IBinder;
import android.os.Parcel;
/**
* 代理 负责发送信令
* @author chenhan
*
*/
public class PlayerProxy implements IPlayer{
private IBinder ib;
private String mStatus;
PlayerProxy(IBinder ibinder)
{
ib = ibinder;
}
public void play()
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeString("playing");
try
{
ib.transact(1, data, reply, 0);
mStatus = reply.readString();
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public void stop()
{
// TODO 自动生成的方法存根
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeString("stop");
try
{
ib.transact(2, data, reply, 0);
mStatus = reply.readString();
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public String getStatus()
{
// TODO 自动生成的方法存根
return mStatus;
}
}
package com.example.test1;
import android.os.Binder;
import android.os.Parcel;
import android.util.Log;
/**
* 接收信令 进行处理
* @author chenhan
*
*/
public abstract class PlayerStub extends Binder implements IPlayer
{
@Override
public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws android.os.RemoteException
{
reply.writeString(data.readString()+ " mp3");
if(code == 1)
{
Log.e("PlayerStub", "PlayerStub : play");
this.play();
}
else if(code == 2)
{
Log.e("PlayerStub", "PlayerStub : stop");
this.stop();
}
return true;
}
public abstract void play();
public abstract void stop();
public abstract String getStatus();
}
package com.example.test1;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Message;
import android.os.Parcel;
import android.util.Log;
/**
* 实现具体方法
* @author chenhan
*
*/
public class mp3Binder extends PlayerStub
{
private MediaPlayer mPlayer = null;
private Context ctx;
public mp3Binder(Context cx)
{
ctx= cx;
}
public void play()
{
//if(mPlayer != null)
//return;
//mPlayer = MediaPlayer.create(ctx, null);
try
{
//mPlayer.start();
Log.e("mp3Binder", "mp3Binder : play");
}
catch (Exception e)
{
Log.e("StartPlay", "error: " + e.getMessage(), e);
}
}
public void stop()
{
Log.e("mp3Binder", "mp3Binder : stop");
if (mPlayer != null)
{
//mPlayer.stop();
//mPlayer.release();
mPlayer = null;
}
}
public String getStatus()
{
return null;
}
}
package com.example.test1;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class mp3RemoteService extends Service {
private IBinder mBinder = null;
@Override
public void onCreate()
{
Log.e("mp3RemoteService", "mp3RemoteService : start");
mBinder = new mp3Binder(getApplicationContext());
}
@Override
public IBinder onBind(Intent intent)
{
return mBinder;
}
}
<service android:name="com.example.test1.mp3RemoteService" android:process=":remote" >
<intent-filter>
<action android:name ="com.misoo.pk01.REMOTE_SERVICE" />
</intent-filter>
</service>
private IPlayer pProxy = null;
private ServiceConnection mConnection =new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder ibinder) {
pProxy = new PlayerProxy(ibinder);
if(pProxy == null)
{
Log.e("MainActivity", "pProxy null");
}
else
{
Log.e("MainActivity", "pProxy notnull");
pProxy.play();
}
Log.e("MainActivity", "pProxy aaaa");
}
@Override
public void onServiceDisconnected(ComponentName name)
{
// TODO 自动生成的方法存根
}
};
bindService(new Intent("com.misoo.pk01.REMOTE_SERVICE"),
mConnection, Context.BIND_AUTO_CREATE);
startService(new Intent("com.misoo.pk01.REMOTE_SERVICE"));//Activity销毁Service还存在
bindService(new Intent("com.misoo.pk01.REMOTE_SERVICE"),
mConnection, Context.BIND_AUTO_CREATE);//Activity销毁Service也销毁