我正在开发用cpp(cocos2dx)编写的android应用程序现在我正在做一个必须用java实现的facebook模块。
facebook 调用是异步的,所以我无法知道操作何时完成,除非我有从 java 部分到 cpp 的回调。
例如:
JNI 部分应如下所示:
void CCAndroidApplication::login2Facebook()
{
JniMethodInfo minfo;
if(JniHelper::getStaticMethodInfo(minfo,
"org/cocos2dx/example/myandroidtest",
"login2Facebook",
"(**POINTER TO CALLBACK METHOD DidLogin()**)V"))
{
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
minfo.env->DeleteLocalRef(minfo.classID);
}
}
java部分应该是这样的:
public static void login2Facebook(**POINTER TO native CALLBACK METHOD DidLogin()**)
Session.openActiveSession(me, true, new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
mSession = session;
if (session.isOpened())
{
Request.executeMeRequestAsync(session, new Request.GraphUserCallback()
{
@Override
public void onCompleted(GraphUser user, Response response)
{
if (user != null)
{
**Call nativeDidLogin()**;
}
}
});
}
}
});
}
如果我可以发送包含类似方法的 cpp 对象也很好
class delgateMethods
{
public:
void didLogin();
}
并从java中调用它。
我的问题是:是否可以通过 JNI 发送指向函数的指针并在 java 部分中调用它?
谢谢