diff --git a/cocos/platform/CCDevice.h b/cocos/platform/CCDevice.h index 94fcb86..ff4bc1d 100644 --- a/cocos/platform/CCDevice.h +++ b/cocos/platform/CCDevice.h @@ -98,6 +98,8 @@ public: */ static Data getTextureDataForText(const char * text, const FontDefinition& textDefinition, TextAlign align, int &width, int &height, bool& hasPremultipliedAlpha); + /** Get OpenUDID value */ + static const std::string getOpenUDID(void); private: CC_DISALLOW_IMPLICIT_CONSTRUCTORS(Device); }; diff --git a/cocos/platform/CMakeLists.txt b/cocos/platform/CMakeLists.txt index 21a6c58..655f663 100644 --- a/cocos/platform/CMakeLists.txt +++ b/cocos/platform/CMakeLists.txt @@ -93,6 +93,7 @@ elseif(APPLE) platform/ios/CCPlatformDefine-ios.h platform/ios/CCStdC-ios.h platform/ios/CCInputView-ios.h + platform/ios/openudid/OpenUDIDIOS.h ) set(COCOS_PLATFORM_SPECIFIC_SRC ${COCOS_PLATFORM_SPECIFIC_SRC} @@ -104,6 +105,7 @@ elseif(APPLE) platform/ios/CCGLViewImpl-ios.mm platform/ios/CCImage-ios.mm platform/ios/CCInputView-ios.mm + platform/ios/openudid/OpenUDIDIOS.m ) endif() diff --git a/cocos/platform/android/CCDevice-android.cpp b/cocos/platform/android/CCDevice-android.cpp index 16ee4cb..cad81b3 100644 --- a/cocos/platform/android/CCDevice-android.cpp +++ b/cocos/platform/android/CCDevice-android.cpp @@ -178,6 +178,22 @@ void Device::vibrate(float duration) JniHelper::callStaticVoidMethod(helperClassName, "vibrate", duration); } +const std::string Device::getOpenUDID(void) +{ + JniMethodInfo methodInfo; + if (JniHelper::getStaticMethodInfo(methodInfo, "org/cocos2dx/utils/PSDevice", "getOpenUDID", + "()Ljava/lang/String;")) + { + jstring judid = (jstring)methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID); + char* udid = (char*)methodInfo.env->GetStringUTFChars(judid, 0); + std::string ret = udid; + methodInfo.env->ReleaseStringUTFChars(judid, udid); + methodInfo.env->DeleteLocalRef(methodInfo.classID); + return ret; + } + return std::string(""); +} + NS_CC_END // this method is called by Cocos2dxBitmap diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java index fb44f3f..be03c35 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java +++ b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java @@ -51,6 +51,7 @@ import android.annotation.TargetApi; import org.cocos2dx.lib.Cocos2dxHelper.Cocos2dxHelperListener; import org.cocos2dx.utils.PSNetwork; +import org.cocos2dx.utils.PSDevice; import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; @@ -430,6 +431,7 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe } // final, can safe init PS module PSNetwork.init(this); + PSDevice.init(this); } @TargetApi(Build.VERSION_CODES.M) diff --git a/cocos/platform/android/java/src/org/cocos2dx/utils/PSDevice.java b/cocos/platform/android/java/src/org/cocos2dx/utils/PSDevice.java new file mode 100755 index 0000000..7f0eab1 --- /dev/null +++ b/cocos/platform/android/java/src/org/cocos2dx/utils/PSDevice.java @@ -0,0 +1,41 @@ +package org.cocos2dx.utils; + +import org.cocos2dx.lib.Cocos2dxActivity; +import android.content.Context; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.telephony.TelephonyManager; + +public class PSDevice { + static Cocos2dxActivity mContext = null; + static TelephonyManager mTelephonyManager = null; + + public static void init(Cocos2dxActivity context) { + mContext = context; + mTelephonyManager = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + } + + private static String getMacAddress() { + WifiManager wifi = (WifiManager) mContext.getApplicationContext() + .getSystemService(Context.WIFI_SERVICE); + WifiInfo info = wifi.getConnectionInfo(); + if (info == null) + return null; + return info.getMacAddress(); + } + + public static String getOpenUDID() { + String id = null; + if (mTelephonyManager != null) { + id = mTelephonyManager.getDeviceId(); + } + if (id == null) { + id = getMacAddress(); + } + if (id == null) { + id = ""; + } + return id; + } +} \ No newline at end of file diff --git a/cocos/platform/ios/CCDevice-ios.mm b/cocos/platform/ios/CCDevice-ios.mm index 11d4b71..063fa2a 100644 --- a/cocos/platform/ios/CCDevice-ios.mm +++ b/cocos/platform/ios/CCDevice-ios.mm @@ -40,6 +40,7 @@ #import // Vibrate #import +#import "platform/ios/openudid/OpenUDIDIOS.h" const float MAX_MEASURE_HEIGHT = 10000; @@ -624,4 +625,9 @@ void Device::vibrate(float duration) } } +const std::string Device::getOpenUDID(void) +{ + return std::string([[OpenUDIDIOS value] cStringUsingEncoding:NSUTF8StringEncoding]); +} + NS_CC_END diff --git a/cocos/platform/linux/CCDevice-linux.cpp b/cocos/platform/linux/CCDevice-linux.cpp index 806f45e..f00770e 100644 --- a/cocos/platform/linux/CCDevice-linux.cpp +++ b/cocos/platform/linux/CCDevice-linux.cpp @@ -514,4 +514,9 @@ void Device::vibrate(float /*duration*/) { } +const std::string Device::getOpenUDID(void) +{ + return std::string(""); +} + NS_CC_END diff --git a/cocos/platform/mac/CCDevice-mac.mm b/cocos/platform/mac/CCDevice-mac.mm index d78ee99..73a0f4c 100644 --- a/cocos/platform/mac/CCDevice-mac.mm +++ b/cocos/platform/mac/CCDevice-mac.mm @@ -363,4 +363,9 @@ void Device::vibrate(float duration) { } +const std::string Device::getOpenUDID(void) +{ + return std::string(""); +} + NS_CC_END diff --git a/cocos/platform/win32/CCDevice-win32.cpp b/cocos/platform/win32/CCDevice-win32.cpp index 1a2cb3e..4db2859 100644 --- a/cocos/platform/win32/CCDevice-win32.cpp +++ b/cocos/platform/win32/CCDevice-win32.cpp @@ -552,4 +552,9 @@ void Device::vibrate(float duration) CC_UNUSED_PARAM(duration); } +const std::string Device::getOpenUDID(void) +{ + return std::string(""); +} + NS_CC_END diff --git a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp index bf769e8..a164365 100644 --- a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp +++ b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp @@ -91169,6 +91169,34 @@ int lua_cocos2dx_Device_getDPI(lua_State* tolua_S) #endif return 0; } +int lua_cocos2dx_Device_getOpenUDID(lua_State* tolua_S) +{ + int argc = 0; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertable(tolua_S,1,"cc.Device",0,&tolua_err)) goto tolua_lerror; +#endif + + argc = lua_gettop(tolua_S) - 1; + + if (argc == 0) + { + std::string ret = cocos2d::Device::getOpenUDID(); + lua_pushlstring(tolua_S,ret.c_str(),ret.length()); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d\n ", "cc.Device:getOpenUDID",argc, 0); + return 0; +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Device_getOpenUDID'.",&tolua_err); +#endif + return 0; +} static int lua_cocos2dx_Device_finalize(lua_State* tolua_S) { printf("luabindings: finalizing LUA object (Device)"); @@ -91186,6 +91214,7 @@ int lua_register_cocos2dx_Device(lua_State* tolua_S) tolua_function(tolua_S,"setKeepScreenOn", lua_cocos2dx_Device_setKeepScreenOn); tolua_function(tolua_S,"vibrate", lua_cocos2dx_Device_vibrate); tolua_function(tolua_S,"getDPI", lua_cocos2dx_Device_getDPI); + tolua_function(tolua_S,"getOpenUDID", lua_cocos2dx_Device_getOpenUDID); tolua_endmodule(tolua_S); std::string typeName = typeid(cocos2d::Device).name(); g_luaType[typeName] = "cc.Device";