如何从本机空间中的宗地中检索字符串数据

How to retrieve string data from parcel in native space?

本文关键字:检索 字符串 数据 本机 空间      更新时间:2023-10-16

我有一个本机命令,它通过绑定器与Android Framework中的系统服务进行交互,使用包裹获取一些数据并将其显示给用户。数据由整数和字符串变量组成。从 SS 发送的数据使用 parcel.writeInt()和 parcel.writeString()分别用于整数和字符串数据。现在,问题是如何在本机空间(尽管不是 JNI)中检索此数据,其中我的本机命令处理代码以.cpp文件的形式存在?本机空间中没有等效的 package.readInt() 或 parcel.readString() 方法可用于解组或处理收到的宗地数据。如果我在那里使用可用的方法,如parcel.readInt32()和parcel.readString16()方法,数据不正确(可能),并且不会显示在屏幕上。对此问题的任何见解和可能的解决方案将不胜感激。

谢谢和问候,

你需要在 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);
    ...
}