我正在尝试通过Android上的C++/JNI调用Java类。更具体地说,我试图调用这个类的构造函数,它接受一个Android上下文作为参数。如果我的构造函数没有参数,我可以成功地进行调用,但是当我包含必要的上下文作为参数时,我不知道我的JNI签名应该是什么样子,也不知道这是否可能,因为我无法访问该上下文对象。
所以,我的问题是,是否可以调用Java类的构造函数,并将Android上下文作为其唯一的参数?如果是这样的话,是怎么做的?如果没有,有没有解决方法,因为我需要上下文来访问某些Android API类。
发布于 2013-03-12 00:07:21
我不相信以你所说的方式是可能的。但是,在不知道类结构的情况下,您可以始终将其创建为一个具有静态实例的单例实例,该实例在您的活动启动时被实例化,从而该类在那时获得了所需的上下文。它基本上会一直放在那里,直到你准备好从C++调用它,但它确实可以通过上下文为你的请求提供服务。
发布于 2013-03-11 04:29:12
在获取构造函数的方法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);
https://stackoverflow.com/questions/15329841
复制