[英]passing parameter from jni to java
How to passing parameter in jni to java.in my case i want to passing getUniqueTargetId to java (android). 如何将jni中的参数传递给java。在我的情况下,我想将getUniqueTargetId传递给java(android)。 Thank you for your help :) ` class CloudImageTarget_UpdateCallback : public QCAR::UpdateCallback { virtual void QCAR_onUpdate(QCAR::State& state) {
谢谢您的帮助:)`类CloudImageTarget_UpdateCallback:公共QCAR :: UpdateCallback {虚拟void QCAR_onUpdate(QCAR :: State&state){
QCAR::TrackerManager& trackerManager = QCAR::TrackerManager::getInstance();
QCAR::ImageTracker* imageTracker = static_cast<QCAR::ImageTracker*>(
trackerManager.getTracker(QCAR::ImageTracker::getClassType()));
QCAR::TargetFinder* finder = imageTracker->getTargetFinder();
const int statusCode = finder->updateSearchResults();
if (statusCode < 0)
{
showErrorMessage(statusCode, state.getFrame().getTimeStamp());
}
else if (statusCode == QCAR::TargetFinder::UPDATE_RESULTS_AVAILABLE)
{
// Process new search results
if (finder->getResultCount() > 0)
{
const QCAR::TargetSearchResult* result = finder->getResult(0);
if (result->getTrackingRating() > 0)
{
QCAR::Trackable* newTrackable = finder->enableTracking(*result);
if (newTrackable != 0)
{
LOG("Successfully created new trackable '%s' with rating '%d'.",
newTrackable->getName(), result->getTrackingRating());
LOG( "Comparing Strings. currentTargetId: %s lastTargetId: %s",
result->getUniqueTargetId(), lastTargetId);
if (strcmp(result->getUniqueTargetId(), lastTargetId) != 0)
{
renderState = RS_LOADING;
snprintf(targetMetadata, CONTENT_MAX, "%s",result->getMetaData());
}
else
renderState = RS_NORMAL;
pthread_mutex_lock(&framesToSkipMutex);
framesToSkipBeforeRenderingTransition = 10;
pthread_mutex_unlock(&framesToSkipMutex);
// Initialize state variables
trackingStarted = false;
// Updates the value of the current Target Id with the new target found
pthread_mutex_lock(&lastTargetIdMutex);
strcpy(lastTargetId, result->getUniqueTargetId());
pthread_mutex_unlock(&lastTargetIdMutex);
enterContentMode();
}
else
LOG("Failed to create new trackable.");
}
}
}
}
}; }; `
`
You can call and pass parameter from JNI to Java using reflection. 您可以使用反射将参数从JNI调用并传递给Java。
Create a method in your Java class 在Java类中创建一个方法
void setUniqueTargetID(int targetID) {
this.targetID = targetID;
}
In your JNI get the class dynamically 在您的JNI中动态获取类
jclass clazz = (*env)->FindClass(env, "complete_package_name/class_name");
get the method 得到方法
jmethodID setUniqID= (*env)->GetMethodID(env, clazz, "setUniqueTargetID", "(I)");
(*env)->CallObjectMethod(env, obj, setUniqID, ID);
here my code so far: //inside virtual void QCAR_onUpdate(QCAR::State& state) void i put this code: jclass cls = env->FindClass("com/qualcomm/QCARSamples/CloudImageTarget/CloudImageTarget"); jmethodID mid = env->GetMethodID(cls,"getUniqeTargetID", "([Ljava/lang/String;)V"); env->CallObjectMethod(jObj, mid,newTrackable->getName()); in java i create method String Msg; public void getUniqeTargetID(String msg) { this.Msg = msg; } \\\\in initApplicationAR i call the method: Log.d(TAG,"Target_Name: "+ Msg);
到目前为止,这里是我的代码://内部虚拟void QCAR_onUpdate(QCAR :: State&state)void我输入了以下代码:
jclass cls = env->FindClass("com/qualcomm/QCARSamples/CloudImageTarget/CloudImageTarget"); jmethodID mid = env->GetMethodID(cls,"getUniqeTargetID", "([Ljava/lang/String;)V"); env->CallObjectMethod(jObj, mid,newTrackable->getName()); in java i create method String Msg; public void getUniqeTargetID(String msg) { this.Msg = msg; } \\\\in initApplicationAR i call the method: Log.d(TAG,"Target_Name: "+ Msg);
jclass cls = env->FindClass("com/qualcomm/QCARSamples/CloudImageTarget/CloudImageTarget"); jmethodID mid = env->GetMethodID(cls,"getUniqeTargetID", "([Ljava/lang/String;)V"); env->CallObjectMethod(jObj, mid,newTrackable->getName()); in java i create method String Msg; public void getUniqeTargetID(String msg) { this.Msg = msg; } \\\\in initApplicationAR i call the method: Log.d(TAG,"Target_Name: "+ Msg);
result of log: Target_Name:null.. thank you for your help Dayanand, and please correct me.thanks a lot :) 日志结果:Target_Name:null ..谢谢您对Dayanand的帮助,请纠正我。非常感谢:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.