2013-03-11 12 views
5

AndroidでC++/JNI経由でJavaクラスを呼び出そうとしています。具体的には、Android Contextをパラメータとするこのクラスのコンストラクタを呼び出しようとしています。私のコンストラクタにパラメータがない場合は問題はありませんが、パラメータとして必要なContextを含めるとJNIの署名がどのようなものかわかりませんし、そのコンテキストオブジェクトへのアクセス。Android Contextパラメータを持つC++/JNIからJavaメソッドを呼び出す方法

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

+0

このヘルプ[Android ndk/jniでC++を使用](http://stackoverflow.com/questions/6423078/use-c-with-android-ndk-jni)は役に立ちますか? – static

答えて

2

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

+0

ありがとう!完璧に働いた! –

0

コンストラクタのメソッドIDを取得するときに、必要なものを指定するだけで済みます。

​​

は代わりに、あなたがGetMethodIDを使用した場合、引数の型を指定してNewObjectを呼び出すときにそれを渡したい:現在、あなたは、おそらくのようなものをやっています。

constructor = (*env)->GetMethodID(env, cls, "<init>", "(Landroid/content/Context;)V"); 
object = (*env)->NewObject(env, cls, constructor, context); 
+0

ありがとう、しかし、構文を提供するため...任意のアイデアは、可能な場合は、Javaのメソッドを持っているコンテキストを達成することは可能ですか最初にそれを渡す? –

+0

Javaクラスの場合と同じように、Javaから1つを渡す必要があります。可能であれば、あなたが巧みでアプリケーションのコンテキストを見つけることができますが、これは良い設計ではありません(そして、とりわけ、クラスをあまりテストすることはできません)。 –

関連する問題