Android Framework GPS

商风华
2023-12-01


1. Code snippet

Path: frameworks\base\services\jni\com_android_server_location_GpsLocationProvider.cpp 


static void location_callback(GpsLocation* location)
{
    JNIEnv* env = AndroidRuntime::getJNIEnv();
    env->CallVoidMethod(mCallbacksObj, method_reportLocation, location->flags,
            (jdouble)location->latitude, (jdouble)location->longitude,
            (jdouble)location->altitude,
            (jfloat)location->speed, (jfloat)location->bearing,
            (jfloat)location->accuracy, (jlong)location->timestamp);
    checkAndClearExceptionFromCallback(env, __FUNCTION__);
}

2. class JNIEnv / method
2.1 class JNIEnv

    definition in file development\ndk\platforms\android-3\include\jni.h

2.2 method CallVoidMethod

    调用方法:
   (*env)->CallVoidMethod(env, obj, mid, depth);// CallStaticIntMethod(...)调用静态方法 
   使用CallVoidMethod方法调用方法。参数的意义:
   env-->JNIEnv
   obj-->通过本地方法穿过来的jobject
   mid-->要调用的MethodID(即第二步获得的MethodID)

   depth-->方法需要的参数(对应方法的需求,添加相应的参数)

2.3 获取MethodID:
    jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V"); //GetStaticMethodID(…),获取静态方法的ID使用GetMethdoID方法获取你要使用的方法的MethdoID  
其参数的意义:
env-->JNIEnv
cls-->第一步获取的jclass
"callback"-->要调用的方法名
"(I)V"-->方法的Signature, 签名同JNI规则。


 类似资料:

相关阅读

相关文章

相关问答