资讯专栏INFORMATION COLUMN

cocos2d-x 2.2.0 如何取得安卓设备的类型

邹强 / 812人阅读

摘要:中有一个类里面提供了若干个静态成员,通过他们可以获取关于设备的各项信息。在中可以通过访问到它们。下面是我使用时的代码可以作为参考。另外附上一个代码库,他提供了很多主流机型的值。

android SDK中有一个类android.os.Build里面提供了若干个静态成员,通过他们可以获取关于设备的各项信息。
在cocos2d-x中可以通过jni访问到它们。
下面是我使用时的代码可以作为参考。

#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值。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12048.html

相关文章

  • cocos2d-x 2.2.0 CCUserDefault在安卓系统下不能正确保存问题

    摘要:解决方案请在修改数据后手动调用一些废话但是是我眼瞎了吗用于的和用于的中对于的实现都是空的。好吧,总之在手机上测试确实非常立竿见影。无论如何,请在修改数据后手动调用,而不依赖系统的自动,保持一个良好的编码习惯。 解决方案 请在修改数据后手动调用CCUserDefault::flush() 一些废话 但是—— 是我眼瞎了吗? 用于win32的CCUserDefault.cpp...

    wwolf 评论0 收藏0
  • cocos2d-html5+JSBinding+cocos2d-x+GameKit实现蓝牙对战

    摘要:为什么做这个我想给自己最近发布的游戏加入蓝牙对战功能,我的游戏使用了。我在网上搜了下,没找到相关的文章。如果你想实现类似的功能,我希望这个能对你有所启发。 为什么做这个: 我想给自己最近发布的游戏加入蓝牙对战功能,我的游戏使用了cocos2d-html5、JSBinding、cocos2d-x。我在网上搜了下,没找到相关的文章。如果你想实现类似的功能,我希望这个demo能对你有所启发...

    yexiaobai 评论0 收藏0
  • JavaScript 就要统治世界了?

    摘要:欢迎使用中文文档架构概览是网易项目团队开发的一个基于进行开发的应用层框架,提供了一个轻量级的容器来编写简单可维护的。 JavaScript 可以……嘛,不就是操作一下 DOM,可以让元素飞来飞去吗JavaScript 是……不就是用 jQuery 让网页动起来,顶多就是再用用 Ajax 和后端进行一下数据交换吗JavaScript 是一门……最讨厌和鄙视这种弱类型不需要编译的脚本语言...

    AbnerMing 评论0 收藏0
  • 利用 Cocos2dx-3.0 新物理特性模拟弹珠迷宫

    摘要:教程中将详细介绍如何使用搭配物理引擎以及重力感应来模拟弹珠迷宫的效果。弹珠迷宫实现创建项目硬件环境开发工具,引擎版本以上是我的开发环境,你大可根据你的开发环境做相应操作。 前言 showImg(http://segmentfault.com/img/bVbOrT); 看到这张图,不知道你会不会想到些什么?儿时的玩物,满满的童年的味道。那时候没有太多玩具,这些小玩意足以让我兴奋很久。...

    zhiwei 评论0 收藏0
  • 在android系统下开启App沉浸模式。(在cocos2d 3.6 中实现游戏全屏/隐藏系统菜单

    摘要:网上大量资料指出在中进行修改,但是我尝试之后发觉并没有效。我个人要解决的问题是在中实现游戏的全屏。如果读者的情况和我一样则可以简单的用以下代码来替换掉项目中的如果是项目的话,用以下代码来替换掉项目中的 网上大量资料指出在AndroidManifest中进行修改,但是我尝试之后发觉并没有效。 经过实践证明,谷歌在安卓4.4之后提出了一个Immersive Full-Screen Mod...

    roundstones 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<