android java类怎么调用.cpp_Android framwork cpp调用java function

这里以android_view_PointerIcon.cpp的函数getSystemIcon为例。

1、在gPointerIconClassInfo的结构体中,定义了jmethodID getSystemIcon,并且在

register_android_view_PointerIcon中进行初始化设置;

static struct {

jclass clazz;

jfieldID mStyle;

jfieldID mBitmap;

jfieldID mHotSpotX;

jfieldID mHotSpotY;

jmethodID getSystemIcon;

jmethodID load;

} gPointerIconClassInfo;

int register_android_view_PointerIcon(JNIEnv* env) {

FIND_CLASS(gPointerIconClassInfo.clazz, "android/view/PointerIcon");

GET_FIELD_ID(gPointerIconClassInfo.mBitmap, gPointerIconClassInfo.clazz,

"mBitmap", "Landroid/graphics/Bitmap;");

GET_FIELD_ID(gPointerIconClassInfo.mStyle, gPointerIconClassInfo.clazz,

"mStyle", "I");

GET_FIELD_ID(gPointerIconClassInfo.mHotSpotX, gPointerIconClassInfo.clazz,

"mHotSpotX", "F");

GET_FIELD_ID(gPointerIconClassInfo.mHotSpotY, gPointerIconClassInfo.clazz,

"mHotSpotY", "F");

GET_STATIC_METHOD_ID(gPointerIconClassInfo.getSystemIcon, gPointerIconClassInfo.clazz,

"getSystemIcon", "(Landroid/content/Context;I)Landroid/view/PointerIcon;");

GET_METHOD_ID(gPointerIconClassInfo.load, gPointerIconClassInfo.clazz,

"load", "(Landroid/content/Context;)Landroid/view/PointerIcon;");

return 0;

}

GET_STATIC_METHOD_ID(gPointerIconClassInfo.getSystemIcon, gPointerIconClassInfo.clazz,

"getSystemIcon", "(Landroid/content/Context;I)Landroid/view/PointerIcon;");

第一个传入参数会被初始化为java层的getSystemIcon引用,第三个参数即是java层函数名,第四个是java层函数的输入输出参数描述

2、register_android_view_PointerIcon是在AndroidRuntime.cpp中运行的;

extern int register_android_view_PointerIcon(JNIEnv* env);

static const RegJNIRec gRegJNI[] = {

REG_JNI(register_android_view_MotionEvent),

REG_JNI(register_android_view_PointerIcon),

REG_JNI(register_android_view_VelocityTracker),

};

3、使用:

jobject android_view_PointerIcon_getSystemIcon(JNIEnv* env, jobject contextObj, int32_t style) {

jobject pointerIconObj = env->CallStaticObjectMethod(gPointerIconClassInfo.clazz,

gPointerIconClassInfo.getSystemIcon, contextObj, style);

if (env->ExceptionCheck()) {

ALOGW("An exception occurred while getting a pointer icon with style %d.", style);

LOGW_EX(env);

env->ExceptionClear();

return NULL;

}

return pointerIconObj;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值