我有一个Native Command,它通过绑定器使用parcel与Android框架中的系统服务进行交互,以获取一些数据并将其显示给用户。数据由整数和字符串变量组成。从SS发送的数据使用 parcel.writeInt() 和 parcel.writeString() 分别用于整数和字符串数据。 现在,问题是如何在本机空间(而不是JNI)中检索此数据,其中我的本机命令处理代码以.cpp文件的形式存在?原生空间中没有等效的parcel.readInt()或parcel.readString()方法可用于解组或处理收到的宗地数据。如果我使用parcel.readInt32()和parcel.readString16()方法之类的可用方法,则数据不正确(可能)并且不会显示在屏幕上。 我们非常感谢您对此问题的任何见解和可能的解决方案。
谢谢&问候,
答案 0 :(得分:0)
您需要在Java中创建一个从包裹中获取字符串的函数:
private String getDataFromParcel(Parcel parcel) {
return parcel.readString();
}
从JNI调用它(你说你在JNI环境中有包裹):
std::string getString(jobject object, jobject parcel) const {
bool result = false;
JNIEnv *env = JniGetEnv();
jmethod jGetDataFromParcelMethod = getJMethod(object);
jstring javaValue = (jstring) env->CallObjectMethod(object, jGetDataFromParcelMethod, parcel);
...
}