Cocos2dx 项目 C++ 通过Jni 调用Java获取字符串信息错乱
Cocos2dx项目,Android版本需要获得安卓手机的设备识别码imei、mac地址、系统版本号等信息。 常规的方法是通过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 显示出来的sImei、sMac、sSysVer和 sDeviceInfo 内容不同! 而且sImei、sMac、sSysVer经常变化,像是内存错乱的感觉。 而在Java端写的Log明明是对的,为什么到C++后就乱了? sDeviceInfo是为了解决分别获取信息时信息错乱设计的, 可是这个sDeviceInfo返回的信息有时候也会有错误! 这就要命了!程序无法正常工作。 百思不得其解,写Blog备忘,等待专家帮忙解答。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |