android SDK中有一个类android.os.Build里面提供了若干个静态成员,经过他们能够获取关于设备的各项信息。
在cocos2d-x中能够经过jni访问到它们。
下面是我使用时的代码能够做为参考。html
#include "MfMetrics.h" #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID #include "platform/android/jni/JniHelper.h" #define JAVAVM cocos2d::JniHelper::getJavaVM() NS_MF_BEGIN; 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) { CCLOG("Failed to get the environment using GetEnv()"); break; } if (JAVAVM->AttachCurrentThread(&pEnv, 0) < 0) { CCLOG("Failed to get the environment using AttachCurrentThread()"); break; } jclass classID = pEnv->FindClass(className); if (!classID) { CCLOG("Failed to find class of %s", className); break; } jfieldID fieldID = pEnv->GetStaticFieldID(classID, fieldName, "Ljava/lang/String;"); if(!fieldID) { CCLOG("Failed to find field of %s", fieldName); 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 MfMetrics::_getDeviceName() { #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 + ")"; } NS_MF_END #endif
另外附上一个Github代码库,他提供了不少主流机型的Build.MODEL值。java