ChatMainActivity.java
private IVoiceRecorderService mService = null;
private final ServiceConnection mServiceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
Toast.makeText(ChatMainActivity.this, "bind service connected",Toast.LENGTH_SHORT).show();
mService = IVoiceRecorderService.Stub.asInterface(service);
}
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
};
VoiceRecorderService.java
private IVoiceRecorderService.Stub mBinder;
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
mBinder = new IVoiceRecorderServiceStub(this);
}
private static class IVoiceRecorderServiceStub extends IVoiceRecorderService.Stub {
private WeakReference<VoiceRecorderService> mService;
public IVoiceRecorderServiceStub(
VoiceRecorderService voiceRecorderService) {
mService = new WeakReference<VoiceRecorderService>(voiceRecorderService);
}
public boolean startRecording() throws RemoteException {
return mService.get().startRecording();
}
}
public boolean startRecording() {
// TODO Auto-generated method stub
return false;
}
IVoiceRecorderService.aidl
interface IVoiceRecorderService
{
boolean startRecording();
}
VRUtil.java
public class VRUtil {
private static String TAG = "VRUtil";
public static IVoiceRecorderService sService = null;
private static HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();
public static boolean bindToService(Context context, ServiceConnection callback) {
if (context.startService(new Intent(context, VoiceRecorderService.class)) != null) {
ServiceBinder sb = new ServiceBinder(callback);
sConnectionMap.put(context, sb);
return context.bindService(
(new Intent()).setClass(context, VoiceRecorderService.class), sb, 0);
} else {
return false;
}
}
public static void unbindFromService(Context context) {
Log.i(TAG, "unbindFromService");
ServiceBinder sb = sConnectionMap.remove(context);
if (sb == null)
return;
context.unbindService(sb);
if (sConnectionMap.isEmpty()) {
sService = null;
}
}
private static class ServiceBinder implements ServiceConnection {
ServiceConnection mCallback;
ServiceBinder(ServiceConnection callback) {
mCallback = callback;
}
public void onServiceConnected(ComponentName className, android.os.IBinder service) {
sService = IVoiceRecorderService.Stub.asInterface(service);
if (mCallback != null)
mCallback.onServiceConnected(className, service);
}
public void onServiceDisconnected(ComponentName className) {
if (mCallback != null)
mCallback.onServiceDisconnected(className);
}
}
}