繁体   English   中英

如何从C ++ / JNI调用Java方法,该方法采用Android Context参数

[英]How to call a Java method from C++ / JNI which takes an Android Context parameter

我试图通过Android上的C ++ / JNI调用Java类。 更具体地说,我试图调用此类的构造函数,该构造函数将Android上下文作为参数。 如果我的构造函数没有参数,我没有问题成功调用,但是当我将必要的Context作为参数包含在内时,我不知道我的JNI签名应该是什么样的,并且还怀疑这是否可能因为我没有访问该上下文对象。

所以,我的问题是,是否可以调用Java类的构造函数,该类将Android上下文作为其唯一参数? 如果是这样,怎么样? 如果没有,是否有解决方法,因为我需要上下文来访问某些Android API类。

我不相信你说的可能性。 但是,如果不了解类的结构,您可以始终将其创建为具有静态实例的单例,该实例在启动Activity时实例化,从而该类在此时获得所需的上下文。 它基本上会坐在那里,直到你准备从C ++调用,但确实可以用上下文服务你的请求。

获取构造函数的方法ID时,只需指定所需的方法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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM