我在 eclipse 的同一个工作区中有 2 * 个不同的项目 * (大多数 AIDL 示例在同一个项目中处理不同的进程)。项目 A 就是一个简单的 HelloWorld,它只显示 2 个数字的总和。我从一个名为 MyFirstApp 的客户端远程调用它来显示它。
问题:永远不会调用 onServiceConnected() 方法。
到目前为止我已经尝试过:
1)清单文件有 android:process=":remote"> 标签。存在意图过滤器。是的,所有这些都在应用程序标签内。这里是:
<service android:name=".ArithmeticService"
android:process=":remote">
<intent-filter >
<action android:name="com.example.helloworld.ArithmeticService"/>
</intent-filter>
</service>
</application>
2)在我的ArithmeticService中,函数onBind()不是简单的返回Null,而是返回mBinder。这里是:
@Override
public IBinder onBind(Intent intent) {
// Return the interface
Log.d(getClass().getSimpleName(),"IBinder");
return mBinder;
}
3)在客户端,接口的实现在服务器端的同一个包中。
4)在我客户端的MainActivity的onCreate()函数中,我调用了函数initConnection(),如下:
void initConnection(){
mServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mService = null;
Toast.makeText(getApplicationContext(), "no", Toast.LENGTH_SHORT).show();
Log.d("IRemote", "Binding - Service disconnected");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
// TODO Auto-generated method stub
mService = IRemote.Stub.asInterface((IBinder) service);
Toast.makeText(getApplicationContext(), "yes", Toast.LENGTH_SHORT).show();
Log.d("IRemote", "Binding is done - Service connected");
}
};
if(mService == null)
{
Intent it = new Intent();
it.setAction("com.example.helloworld.ArithmeticService");
//binding to remote service
bindService(it, mServiceConnection, Service.BIND_AUTO_CREATE);
}
}
其余的代码非常简单。单击按钮时,应调用远程服务器并应显示 2 个数字的总和。
任何帮助将不胜感激。