这是我的服务实现。我有 2 个辅助文件 IService 和 IDataServiceCallback。
private ServiceConnection mConnection = new ServiceConnection()
{
public void onServiceConnected(ComponentName className, IBinder service)
{
serv = iService.Stub.asInterface((IBinder)service);
try
{
serv.registerCallback(mCallback);
}
catch (RemoteException e)
{
e.printStackTrace();
}
}
public void onServiceDisconnected(ComponentName className)
{
try
{
serv.unregisterCallback(mCallback);
}
catch(RemoteException e)
{
e.printStackTrace();
}
serv = null;
}
};
这是我的 mCallback 部分。
private iDataServiceCallback mCallback = new iDataServiceCallback.Stub()
{
@Override
public void updateResponse(String text) throws RemoteException
{
// TODO Auto-generated method stub
}
@Override
public void loginResponse(String text) throws RemoteException {
// TODO Auto-generated method stub
Message msg = Message.obtain();
msg.obj = text;
handler.sendMessage(msg);
}
};
在服务方面,我已经实现了这一点。
@Override
public IBinder onBind(Intent arg) {
// TODO Auto-generated method stub
return mBinder;
}
private final iService.Stub mBinder = new iService.Stub()
{
@Override
public void registerCallback(iDataServiceCallback cb) throws RemoteException {
// TODO Auto-generated method stub
if (cb != null)
{
mCallbacks.register(cb);
}
}
@Override
public void unregisterCallback(iDataServiceCallback cb) throws RemoteException {
// TODO Auto-generated method stub
if (cb != null) mCallbacks.unregister(cb);
}
这是 IService.aidl
package com.nishant.phototest;
import com.nishant.phototest.iDataServiceCallback;
interface iService
{
void doLogin(String ip,String port);
void updatePhoto(in byte[] data);
void registerCallback(iDataServiceCallback cb);
void unregisterCallback(iDataServiceCallback cb);
}
这是 IDataServiceCallBack.aidl
package com.nishant.phototest;
oneway interface iDataServiceCallback
{
void loginResponse(String text);
void updateResponse(String text);
}
希望这会帮助你。