0

JNI を使用して、Java ライブラリ (JAR) からいくつかの関数を呼び出しています。これらの関数の 1 つは、いくつかのコールバック (成功とエラー) を持つリスナーを必要とします。これらのコールバックを処理するために必要な関数は、ネイティブ コードにあります。ネイティブ コードからこれらのネイティブ関数を使用してリスナーを作成し、それを JNI 経由で渡すことは可能ですか?

インターフェイス自体は公開されていませんが、Google ヘルパーを使用して購入フローを開始する InApp Purchase と同じように機能します。

mHelper.launchPurchaseFlow(activity, mItems[idx], idx, mPurchaseFinishedListener, "");

mPurcahseFinishedListener は次のようになります。

`

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener()
{
    public void onIabPurchaseFinished(IabResult result, Purchase purchase)
    {
        Log.v("YER", "Its here");
    }
};

`

アイデアは、onIabPurchaseFinished 関数が実際にはネイティブ コード関数であるということです。

4

1 に答える 1

0

まず、Java 側が関数を直接呼び出せるような方法で、ネイティブ コードの関数ポインターを Java に渡すことはできません。

しかし、できることは、関数ポインターを整数 (または列挙) トークンにマップし、それらを Java の世界に返すことです。native次に、関数ポインター トークンを引数として受け取るコールバックを実行するためのメソッドを定義して実装します。このメソッドは、トークンを関数ポインターにリバース マップし、対応する関数を呼び出してコールバック アクションを実行します。

于 2013-09-16T12:07:44.063 に答える