我收到了绑定的活动和服务。
当在ServiceConnection中调用onServiceConnected时,我会做下一件事:
mInterfaceObject = IInterface1.Stub.asInterface(arg1);
mInterfaceObject.register(mController);
mController是:
private final IInterface2.Stub mController = new IInterface2.Stub() {
IInterface1和IInterface2都是AIDL文件。
现在问题。 在服务中执行寄存器。该参数将为null。
我做错了什么?
答案 0 :(得分:6)
Eclipse自动添加了下一个方法
@Override
public IBinder asBinder() {
return null;
};
这搞砸了整个沟通。不应该覆盖此方法。
答案 1 :(得分:3)
这是我的服务实现。我有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);
}
希望这会帮助你。
答案 2 :(得分:0)
自动生成的具体类 ICallback.Default
也实现了 asBinder 并返回 null。
@Override
public IBinder asBinder() {
return null;
};
确保扩展 ICallback.Stub
而不是 ICallback.Default
。