绑定Aidl服务

时间:2016-04-08 09:03:46

标签: android android-intent android-service aidl

我使用名为 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;
}

0 个答案:

没有答案