加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2dx 项目 C++ 通过Jni 调用Java获取字符串信息错乱

发布时间:2020-12-14 17:04:10 所属栏目:百科 来源:网络整理
导读:Cocos2dx 项目, Android 版本需要获得安卓手机的设备识别码 imei 、 mac 地址、系统版本号等信息。 常规的方法是通过 Jni ,由 C++ 调用 Java 的接口获取相关信息。 1 、在 Java 的 Cocos2dxHelper.java 中添加四个函数: // 调用 Java 获取 Android 设备的

Cocos2dx项目,Android版本需要获得安卓手机的设备识别码imeimac地址、系统版本号等信息。

常规的方法是通过Jni,由C++ 调用Java的接口获取相关信息。


1、在Java Cocos2dxHelper.java中添加四个函数:

//调用Java获取Android设备的imei

public static String getImei(){}

//调用Java获取Android设备的MacAddress

public static String getMacAddress(){}

//调用Java获取Android设备的系统版本号

public static String getSysVersion(){}


//调用Java获取Android设备信息

public static String getDeviceInfo(){

return imei + macadd + sysver;

}


2、在C++ 定义了中间函数

//调用Java获取Android设备的组合信息

const char* getDeviceInfo(){

JniMethodInfo t;

if(JniHelper::getStaticMethodInfo(t,CLASS_NAME,"getDeviceInfo","()Ljava/lang/String;")) {

jstring jInfo = (jstring)t.env->CallStaticObjectMethod(t.classID,t.methodID);

std::string strInfo = JniHelper::jstring2string(jInfo);

return strInfo.c_str();

}else{

return "";

}

}

//调用Java获取Android设备的imei

const char* getImei(){

jstring jImei = (jstring)t.env->CallStaticObjectMethod(t.classID,69)"> std::string strImei = JniHelper::jstring2string(jImei);

return strImei.c_str();

//调用Java获取Android设备的MacAddress

const char* getMacAddress(){

jstring jMac = (jstring)t.env->CallStaticObjectMethod(t.classID,69)"> std::string strMac = JniHelper::jstring2string(jMac);

return strMac.c_str();

}

//调用Java获取Android设备的系统版本号

const char* getSysVersion(){

jstring jVer = (jstring)t.env->CallStaticObjectMethod(t.classID,69)"> std::string strVer = JniHelper::jstring2string(jVer);

return strVer.c_str();

3、在AppDelegate.cpp中分别调用中间函数获取Android信息

const char* sImei = getImei();

const char* sMac = getMacAddress();

const char* sSysVer = getSysVersion();

const char* sDeviceInfo = getDeviceInfo();

最后,问题来了:

MessageBox 显示出来的sImeisMacsSysVer sDeviceInfo 内容不同!

而且sImeisMacsSysVer经常变化,像是内存错乱的感觉。

而在Java端写的Log明明是对的,为什么到C++后就乱了?

sDeviceInfo是为了解决分别获取信息时信息错乱设计的,

可是这个sDeviceInfo返回的信息有时候也会有错误!

这就要命了!程序无法正常工作。

百思不得其解,写Blog备忘,等待专家帮忙解答。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读