Android binder - 通过本机binder接口调用JAVA api时截断的字符串

时间:2016-02-16 14:44:29

标签: android string parcel android-binder

我正在编写一个测试代码来研究binder API,参考(参考样本也有类似的问题)https://github.com/qianjigui/android_system_service_example

我写了一个Java服务和一个本机客户端。似乎一切都很好,除了我无法获得返回String的全部内容。

服务器端方法getName:

@Override
public String getName() throws RemoteException {
    Log.i("------>", "Calling method getName()");
    return "123456";
}

客户端代理方法:

String16 BpTestServiceAPI::getName()
{
    Parcel data, reply;
    data.writeInterfaceToken(IRemoteControlServiceAPI::getInterfaceDescriptor());
    //By operation code to transact
    remote()->transact(GET_NAME, data, &reply);
    //Exception Code. In Java Level, aidl auto generate codes will process exceptioncode.
    reply.readExceptionCode();
    return reply.readString16();
}

问题在于,当我尝试打印getName()的字符串内容时,只能打印第一个字节。例如。我回来了#34; 123456"从服务器,但

ALOGE("Service Name=%s", bts->getName().string());

只给了我

E/ ( 5344): Service Name=1

我还尝试打印出String8实例的长度,在这种情况下它是6。我尝试使用getCString并直接使用它作为(char *),我得到了空结果。

那么,有谁知道这里出了什么问题?

0 个答案:

没有答案