java传递枚举值到JNI

首先需要定义枚举类,此处以录音状态为例,未添加自定义属性和方法:

public enum RecordState {
    Normal,
    Error,
    Recording,
    Discard,
    Export,
    Complete
}

添加java方法供JNI调用,返回枚举对象:

    public static RecordState getRecordState() {
        // ...
        return recordState;
    }

在cpp中调用getRecordState()获取枚举对象,然后使用Enum.ordinal()获取枚举对象从0开始的index。

获取getRecordState()所在的java类:

jclass clazz = (*jniEnv).FindClass("com/xxxx/xxxx/CppCallJava");

获取getRecordState()的methodID并调用以获取枚举对象:

jmethodID stateMethodID = (*jniEnv).GetStaticMethodID(clazz, "getRecordState","()Lcom/xxxx/xxxx/RecordState;");
jobject stateJobj = jniEnv->CallStaticObjectMethod(clazz, stateMethodID);

通过ordinal()返回枚举值:

jclass stateClazz = (*jniEnv).FindClass("com/xxxx/xxxx/RecordState");
jmethodID stateMethod = (*jniEnv).GetMethodID(stateClazz, "ordinal", "()I");
jint state = (*jniEnv).CallIntMethod(stateJobj, stateMethod);

此处枚举类未添加其他方法,返回的jint既是默认的从0开始的有序数值。

若需在cpp读取该状态:

typedef enum {
    Normal,
    Error,
    Recording,
    Discard,
    Export,
    Complete
} RecorderState;
msg.state = RecorderState(state);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值