2017-01-04 55 views
0

我有一個本地命令,它通過綁定使用parcel獲取一些數據並將其顯示給用戶,從而與Android Framework中的System Service交互。數據由整數和字符串變量組成。從SS發送的數據分別使用 parcel.writeInt() 和 parcel.writeString() 分別針對整數和字符串數據發送。 現在,問題是如何在原生空間(不是JNI,但是)我的本地命令處理代碼以.cpp文件的形式存在的情況下檢索此數據?本地空間中沒有等效的parcel.readInt()或parcel.readString()方法可用於解組或處理收到的宗地數據。如果我使用像parcel.readInt32()和parcel.readString16()方法那樣的可用方法,則數據不正確(可能)並且不顯示在屏幕上。 任何有關這個問題的見解和可能的解決方案將不勝感激。如何從本地空間中的宗地中檢索字符串數據?

感謝&問候,

回答

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); 

    ... 
} 
+0

要爲我的代碼添加更清晰,我在這裏添加以下代碼,這是通過我與SS的框架 -交易手段'service-> transact(int32_t code,parcel data,parcel reply);' 我希望數據能夠到達,這是'回覆'內。 現在,在您說明的'getString()'方法中,如何傳遞/獲取'jobject'實例?你的代碼的其他部分,我遵循。 – Wrangler

+1

因此,對於您的情況,靜態Java方法更合適。看看這個例子(它不需要jobject):http://stackoverflow.com/documentation/android/8674/android-java-native-interface-jni/27060/how-to-call-a-java -method-從本機代碼的#噸= 201701051457069409036 –

相關問題