5

Android で C++/JNI を介して Java クラスを呼び出そうとしています。より具体的には、Android Context をパラメーターとして受け取るこのクラスのコンストラクターを呼び出そうとしています。コンストラクターにパラメーターがない場合、呼び出しを正常に行うことに問題はありませんが、必要なコンテキストをパラメーターとして含めると、JNI 署名がどのように見えるべきかわかりません。そのコンテキスト オブジェクトへのアクセス。

だから、私の質問は、Android Context を唯一のパラメーターとして取る Java クラスのコンストラクターを呼び出すことは可能ですか? もしそうなら、どのように?そうでない場合、特定の Android API クラスにアクセスするためにコンテキストが必要なため、回避策はありますか。

4

2 に答える 2

2

あなたが述べた方法でそれが可能だとは思いません。ただし、クラスの構造を知らなくても、アクティビティの起動時にインスタンス化される静的インスタンスを持つシングルトンとしていつでも作成できます。これにより、クラスはその時点で必要なコンテキストを取得します。基本的には、C++ から呼び出す準備が整うまでそこに留まりますが、実際には、コンテキストを使用して要求を処理するために利用できます。

于 2013-03-12T00:07:21.173 に答える
0

コンストラクターのメソッド ID を取得するときは、必要なものを指定するだけです。現在、あなたはおそらく次のようなことをしています:

constructor = (*env)->GetMethodID(env, cls, "<init>", "()V");
object = (*env)->NewObject(env, cls, constructor);

代わりに、使用時に引数の型を指定しGetMethodID、呼び出し時に渡す必要がありNewObjectます。

constructor = (*env)->GetMethodID(env, cls, "<init>", "(Landroid/content/Context;)V");
object = (*env)->NewObject(env, cls, constructor, context);
于 2013-03-11T04:29:11.840 に答える