cocos2dx Android获取Mac地址

在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的路径;
好了,就这么简单,如果大家有什么编程上的问题可以加入火狐的技术与创业群98817001







cocos2dx Android获取Mac地址,布布扣,bubuko.com

cocos2dx Android获取Mac地址

上一篇:Android4.2.2 SurfaceFlinger本地的FramebufferSurface实现真正的显示


下一篇:获取手机网络类型和IP地址