在cocos开发中,有时会遇到需要获取具体手机型号的问题,下面提供一种在Android下获取手机型号的方法:
首先是头文件,注:在android环境下,必须#include <iostream>,否则编译无法找到std::string
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#define JAVAVM cocos2d::JniHelper::getJavaVM()
#endif
下面是具体获取实现
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
extern "C"
{
static std::string jni_GetStaticField_string(const char* className, const char* fieldName)
{
std::string ret;
do
{
JNIEnv *pEnv = 0;
if (JAVAVM->GetEnv((void**)&pEnv, JNI_VERSION_1_4) != JNI_OK)
{
break;
}
if (JAVAVM->AttachCurrentThread(&pEnv, 0) < 0)
{
break;
}
jclass classID = pEnv->FindClass(className);
if (!classID)
{
break;
}
jfieldID fieldID = pEnv->GetStaticFieldID(classID, fieldName, "Ljava/lang/String;");
if(!fieldID)
{
break;
}
jstring jstr = (jstring)pEnv->GetStaticObjectField(classID, fieldID);
const char* chars = pEnv->GetStringUTFChars(jstr, NULL);
ret = chars;
pEnv->ReleaseStringUTFChars(jstr, chars);
} while (0);
return ret;
}
}
std::string getAndroidModel()
{
#define CLASS_NAME "android/os/Build"
std::string BRAND = jni_GetStaticField_string(CLASS_NAME, "BRAND");
std::string DEVICE = jni_GetStaticField_string(CLASS_NAME, "DEVICE");
std::string MODEL = jni_GetStaticField_string(CLASS_NAME, "MODEL");
return BRAND;// + "_" + DEVICE + "(" + MODEL + ")";根据需要选择返回值
}
#endif
注意最后获得的model是手机具体型号,更具需要返回对应值
注:该方法参考自迷途吧