Android GPS数据上报(基于gps_qemu.c)(二)

2014-11-24 10:44:19 ? 作者: ? 浏览: 1
p


if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0) //这里调用的init就是调用qemu_gps_init了


return false; //参数sGpsCallbacks就是包含location_callback指针的结构体了


sGpsCallbacks定义如下:


GpsCallbacks sGpsCallbacks = {


location_callback,


status_callback,


sv_status_callback,


nmea_callback


};



***********************我是分隔线************************


android_location_GpsLocationProvider_wait_for_event函数就注册成了java层中的接口了,env是由上层传下来的参数,具体请参考JNI的相关知识


下面的代码,完成了这个函数的注册:


static JNINativeMethod sMethods[] = {


。。。省略。。。


{"native_wait_for_event", "()V", (void*)android_location_GpsLocationProvider_wait_for_event},


。。。省略。。。


};


int register_android_location_GpsLocationProvider(JNIEnv* env)


{


return jniRegisterNativeMethods(env, "com/android/internal/location/GpsLocationProvider", sMethods, NELEM(sMethods));


}


****************我是分隔线********************


env->CallVoidMethod(obj, method_reportLocation, sGpsLocationCopy.flags, //把数据上报给上层


(jdouble)sGpsLocationCopy.latitude, (jdouble)sGpsLocationCopy.longitude,


(jdouble)sGpsLocationCopy.altitude,


(jfloat)sGpsLocationCopy.speed, (jfloat)sGpsLocationCopy.bearing,


(jfloat)sGpsLocationCopy.accuracy, (jlong)sGpsLocationCopy.timestamp);


参数method_reportLocation,是在下面的函数(android_location_GpsLocationProvider)中被映射为java的reportLocation(在GpsLocationProvider.java中)方法:


static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env, jclass clazz) {


method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");


。。。省略。。。


}


在java层中GpsLocationProvider.java的reportLocation:


private void reportLocation(int flags, double latitude, double longitude, double altitude,


float speed, float bearing, float accuracy, long timestamp) {


if (VERBOSE) Log.v(TAG, "reportLocation lat: " + latitude + " long: " + longitude +


" timestamp: " + timestamp);


mLastFixTime = System.currentTimeMillis();


。。。省略。。。


}


这个函数是(JNI Java部分)java注册到JNI(c/C++部分)中的一个回调,我理解为只用来传递数据。


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: