2017-01-04 16 views
0

バインディングを使ってパーセルを使用してデータを取得してユーザーに表示するために、Android Frameworkのシステムサービスとやりとりするネイティブコマンドがあります。データは、整数変数と文字列変数で構成されます。 SSから送信されたデータは、整数と文字列データの場合、それぞれ parcel.writeInt() と parcel.writeString() を使用して送信されます。 問題は、私のネイティブコマンド処理コードが.cppファイルの形式で存在するネイティブスペース(JNIではなく)でこのデータを取得する方法です。受信したパーセルデータをアンマーシャリングまたは処理するために使用可能なネイティブスペースには、同等のparcel.readInt()またはparcel.readString()メソッドはありません。 parcel.readInt32()やparcel.readString16()メソッドのような利用可能なメソッドを使用すると、データが正しくない(おそらく)、画面に表示されません。 この問題に対する洞察と可能な解決策は非常に高く評価されます。あなたが小包から文字列を取得し、Javaの機能を作成することができます必要ネイティブスペースのパーセルから文字列データを取り出す方法は?

おかげ&よろしく、

答えて

0

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

私のコードのためのより多くの明快さを追加するには、私はframework-にSSで取引しています、それを通しての手段である、ここで次のコードを追加しています'service-> transact(int32_tコード、パーセルデータ、小包応答);' データが届くと期待しているのは「回答」内です。 ここで説明する 'getString()'メソッドの中で、 'jobject'インスタンスをどのように渡したり取得したりするのですか?あなたのコードの他の部分、私は従う。 – Wrangler

+1

あなたのケースでは、静的なJavaメソッドが適切かもしれません。この例を見てください(それはjobjectを必要としません):http://stackoverflow.com/documentation/android/8674/android-java-native-interface-jni/27060/how-to-call-a-java -method-from-native-code#t = 201701051457069409036 –

関連する問題