我使用名为 APIAidlInterface 的AIDL定义了一个公共服务。我现在想知道我是否可以在应用程序中绑定此服务?这意味着客户端将与服务器处于同一个进程中。
这是我简单实现的代码:
APIAidlInterface apiAidlService = null;
private ServiceConnection APIServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
apiAidlService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
apiAidlService = APIAidlInterface.Stub.asInterface(service);
}
};
绑定服务:
Context context = getApplicationContext();
Intent intent = new Intent(context, APIAidlInterface.class);
boolean isAPIBound = context.bindService(intent, APIServiceConnection, Context.BIND_AUTO_CREATE);
if (isAPIBound) {
Log.d(LOG_TAG, "Connected to API");
} else {
Log.e(LOG_TAG, "Connot connect to API");
}
isAPIBound 的结果始终返回 false 。所以,我不确定这是否意味着我无法从同一进程绑定AIDL服务?
顺便说一句,我也创建了一个测试App。在测试应用程序中,我可以使用隐式意图绑定服务,例如:Intent intent = new Intent(APIAidlInterface.class.getName());
。当我使用像Intent intent = new Intent(context, APIAidlInterface.class);
这样的明确意图时。它说无法找到APIAidlInterface。
======================更多信息======================= ==
的AndroidManifest.xml
<service android:name="com.example.APIAidlService"
android:exported="true"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="com.example.APIAidlInterface" />
</intent-filter>
</service>
在 APIAidlService
中private final APIAidlInterfaceImpt apiAidlInterfaceImpt = new APIAidlInterfaceImpt(this);
public IBinder onBind(Intent intent) {
return apiAidlInterfaceImpt;
}