android - JNI 警告预期返回类型 'L' 调用 LocationManager.requestLocationUpdates

标签 android java-native-interface android-ndk

我正在使用 Necessitas(Android 中的 QT)。基本上,使用 Android NDK,android Activity 调用 QT 应用程序 (.so)。

我正在为 GPS 开发一些绑定(bind)。我想我到了那里,但是当我调用方法 requestLocationUpdates(String, Long, Float, LocationListener) 时,我收到了 JNI 警告(JNI 警告预期返回类型“L”)。

部分代码如下:

midGetSystemService = currEnv->GetMethodID(actClass,"getSystemService","(Ljava/lang/String;)Ljava/lang/Object;");

jSystemServiceObj = currEnv->CallObjectMethod(currAct,midGetSystemService,StringArg);

midRequestLocationUpdates = currEnv->GetMethodID(locManClass,"requestLocationUpdates","(Ljava/lang/String;JFLandroid/location/LocationListener;)V");


midConstListener = currEnv->GetMethodID(listenerClass, "<init>", "()V");
jListenerObj = currEnv->NewObject(listenerClass, midConstListener);


currEnv->CallObjectMethod(jSystemServiceObj,midRequestLocationUpdates,StringArg,(jlong)1000,(jfloat)10,jListenerObj);  --->Here is the warning

知道为什么吗?

最佳答案

您正在调用一个返回“void”的方法:

midConstListener = currEnv->GetMethodID(listenerClass, "<init>", "()V");

使用期望返回 JNI 对象的 JNI 调用:

// BAD
currEnv->CallObjectMethod(jSystemServiceObj,midRequestLocationUpdates,StringArg,(jlong)1000,(jfloat)10,jListenerObj);

您应该改用期望返回 void 的 JNI 调用:

// GOOD
currEnv->CallVoidMethod(jSystemServiceObj,midRequestLocationUpdates,StringArg,(jlong)1000,(jfloat)10,jListenerObj);

关于android - JNI 警告预期返回类型 'L' 调用 LocationManager.requestLocationUpdates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017646/

相关文章:

Android onTaskRemoved() 调用网络服务

android - 如何让 android sdk 联系人选择器只给我电话结果而不是我所有的推特粉丝

java - 为 JDK 10 中的类文件生成 JNI 头文件

Java 和 SDL_GetKeyState()

c++ - 适用于 Android 的 FreeType2 交叉编译

android - 如何在recyclerview的每一行中使用搜索栏

java - fragment 未按预期显示/隐藏

java - Java 中的链接错误

android - 调用 RILD 层函数在 android 中实现电话 session

android - Android 中如何知道麦克风是否正在使用