Cocos2dx Android获取Mac地址

本文介绍如何在Cocos2dx项目中利用JNI机制从C++层调用Java层代码来获取Android设备的MAC地址。通过具体代码示例展示了在Java层获取MAC地址的方法,并详细说明了如何在C++层通过JNI调用Java层的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://cocos2d.9tech.cn/news/2014/0327/40118.html


在cocos2dx开发中,我们想获得手机的Mac地址,而目前Android平台下只有java层代码能直接获取Mac地址,有朋友问如果在C++代码中要使用Mac地址该怎么办呢?

很简单,又是强大的JNI机制,思路就是先在java层获取Mac地址的字符串,然后传到C++层。

实现如下:

一、java层的东东:

public static String getMacID()  
{  
    String str ="wei";    
         
    WifiManager wifi = (WifiManager) mActivity.getSystemService(Context.WIFI_SERVICE);      
    WifiInfo info = wifi.getConnectionInfo();      
    str = info.getMacAddress();      
     
    if(str==null)    
    {    
        Log.e("获取android mac地址失败", "0000000");    
    }    
    Log.e("获取android mac地址 "+str, "00000000");    
     
    return str;   
}

代码很简单,就是返回Mac地址的字符串,我只注明一下mActivity,这是声明的一个静态Activity对象

private static Activity mActivity = null;

在create函数里赋值:mActivity = this;

还有一点别忘啦,权限问题:在AndroidManifest.xml文件中添加wifi访问权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
二、再来说说C++层该干的事儿

std::string  FruitGameMenuScene:: getMacID()  
 {  
     std::string strMac=""; 
#if( CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID)  
   
     JniMethodInfo methodInfo; //用于获取函数体  
     bool isHave = JniHelper::getStaticMethodInfo(methodInfo,"com/ymook/FruitGame/FruitGame", "getMacID", "()Ljava/lang/String;");  
   
     if (isHave)  
     {  
         jstring jstr;  
         CCLog("java层getMacID 函数存在;");  
         jstr = (jstring)methodInfo.env->CallStaticObjectMethod(methodInfo.classID,methodInfo.methodID);  
         strMac = JniHelper::jstring2string(jstr);  
         CCMessageBox("Mac", strMac.c_str());  
     }  
     else 
     {  
         CCLog("java层getMacID 函数不存在;");  
     } 
#endif  
     return strMac;  
 }

这代码也简单,就是调用java层的getMacID函数,返回我们想要的Mac字符串。当然用JNI调用也可以先调用静态句柄再调用动态函数的方式,不过个人觉得那种方式较麻烦,就不例举了。我这里只注明一下:

"com/ymook/FruitGame/FruitGame" 这个是我在Android平台下主Activity的路径;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值