MiddleDevice.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. cc.Class({
  2. /**
  3. * 收到JNI发上来的事件
  4. *
  5. * @author Pyden
  6. * @date 2020-03-11
  7. * @param {Object} eventData
  8. */
  9. handleEvent (eventData) {
  10. /* eventData参数:
  11. * @param {String} sdkName
  12. * @param {String} eventKey
  13. * @param {Integer} code
  14. * @param {String} errorMsg
  15. * @param {Object} data
  16. */
  17. /*
  18. 设备回调事件,eventKey如下:
  19. device_exit // 退出游戏
  20. device_camera // 选择好了头像
  21. eventData.data.filePath // 头像地址
  22. */
  23. let eventKey = eventData.eventKey;
  24. switch (eventKey) {
  25. case 'device_exit': {
  26. cc.game.end();
  27. break;
  28. }
  29. case 'device_camera': {
  30. cc.game.emit('e_middle_device_camera_result', eventData);
  31. break;
  32. }
  33. case 'device_on_configuration_changed': {
  34. cc.game.emit('e_middle_device_on_configuration_changed', eventData.data);
  35. break;
  36. }
  37. default:
  38. break;
  39. }
  40. },
  41. /**
  42. * 获取设备模块的配置信息
  43. *
  44. * @author Pyden
  45. * @date 2020-03-23
  46. * @returns {Object}
  47. * config.sdkName sdk名称
  48. */
  49. getConfig () {
  50. if (!this._config) {
  51. let gameConfig = G.MiddleMgr.getGameConfig();
  52. if (gameConfig && gameConfig.device) {
  53. this._config = gameConfig.device;
  54. }
  55. }
  56. return this._config;
  57. },
  58. /**
  59. * sdk名称。本模块只能有一个SDK
  60. *
  61. * @author Pyden
  62. * @date 2020-03-23
  63. * @returns {String}
  64. */
  65. getSdkName () {
  66. let config = this.getConfig() || {};
  67. return config.sdkName;
  68. },
  69. /**
  70. * 判断是否有某个APP device_isApplicationExist
  71. *
  72. * @author Pyden
  73. * @date 2020-03-11
  74. * @param {String} appPkg 包名
  75. * @returns {Boolean}
  76. */
  77. isApplicationExist (appPkg) {
  78. return false;
  79. },
  80. /**
  81. * 跳转到应用商店的指定应用页面 device_rateToMarketApp
  82. *
  83. * @author Pyden
  84. * @date 2020-03-11
  85. * @param {String} appPkg 应用包名
  86. * @param {String} marketPkg 商店应用包名
  87. * @returns {Boolean} 返回值表示是否支持跳转
  88. */
  89. openMarketApp (appPkg, marketPkg) {
  90. return false;
  91. },
  92. /**
  93. * 获取版本名称 device_getVersion
  94. *
  95. * @author Pyden
  96. * @date 2020-03-11
  97. * @returns {String}
  98. */
  99. getVersionName () {
  100. return G.MiddleMgr.sdkConfig.deviceVersion;
  101. },
  102. /**
  103. * 获取版本码 device_getVersionCode
  104. *
  105. * @author Pyden
  106. * @date 2020-03-11
  107. * @returns {Integer}
  108. */
  109. getVersionCode () {
  110. return G.MiddleMgr.sdkConfig.deviceVersionCode;
  111. },
  112. /**
  113. * 获取运营商信息 device_getOperator
  114. * 0 = unknown; 1 = 移动; 2 = 联通; 3 = 电信-1 = 无; 0 = 未知; 1 = wifi; 2 = 2g; 3 = 3g; 4 = 4g
  115. *
  116. * @author Pyden
  117. * @date 2020-03-11
  118. * @returns {Integer}
  119. */
  120. getOperator () {
  121. return 0;
  122. },
  123. /**
  124. * 获取网络状况 device_getApnType
  125. * -1 = 无; 0 = 未知; 1 = wifi; 2 = 2g; 3 = 3g; 4 = 4g
  126. *
  127. * @author Pyden
  128. * @date 2020-03-11
  129. * @returns {Integer}
  130. */
  131. getApnType () {
  132. let networkType = cc.sys.getNetworkType();
  133. if (networkType == 0) {
  134. networkType = -1;
  135. }
  136. return networkType;
  137. },
  138. /**
  139. * 获取设备名称 device_getDeviceName
  140. *
  141. * @author Pyden
  142. * @date 2020-03-11
  143. * @returns {Stirng}
  144. */
  145. getDeviceName () {
  146. return '默认设备名称';
  147. },
  148. /**
  149. * 获取设备信息 device_getDeviceInfo
  150. *
  151. * @author Pyden
  152. * @date 2020-03-11
  153. * @returns {Stirng}
  154. */
  155. getDeviceInfo () {
  156. let deviceName = this.getDeviceName();
  157. let os = cc.sys.os;
  158. let osVersion = cc.sys.osVersion;
  159. let windowPixelResolution = cc.sys.windowPixelResolution;
  160. let info = cc.js.formatStr(
  161. '%s|%s%s|%s*%s',
  162. deviceName,
  163. os,
  164. osVersion,
  165. parseInt(windowPixelResolution.width),
  166. parseInt(windowPixelResolution.height)
  167. );
  168. return info;
  169. },
  170. /**
  171. * 获取保存本地数据的文件地址 device_getUserDataSavePath
  172. *
  173. * @author Pyden
  174. * @date 2020-03-11
  175. */
  176. getUserDataSavePath () {
  177. if (!CC_JSB) {
  178. // 非native平台没有写入路径
  179. return '';
  180. }
  181. return jsb.fileUtils.getWritablePath();
  182. },
  183. /**
  184. * 获取硬件唯一标识 device_getUDID
  185. *
  186. * @author Pyden
  187. * @date 2020-03-11
  188. * @returns {String}
  189. */
  190. getUDID () {
  191. let writablePath = this.getUserDataSavePath();
  192. if (!CC_JSB) {
  193. // 非native平台没有写入路径
  194. // 需要给一个随机数生成udid并缓存下来
  195. let randomNumber = cc.sys.localStorage.getItem('RANDOM_NUMBER');
  196. if (randomNumber) {
  197. writablePath = randomNumber;
  198. } else {
  199. writablePath = Math.random() * new Date().getTime();
  200. cc.sys.localStorage.setItem('RANDOM_NUMBER', writablePath);
  201. }
  202. }
  203. return MD5.hex(String(writablePath));
  204. },
  205. /**
  206. * 获取IMEI号 device_getIMEI
  207. *
  208. * @author Pyden
  209. * @date 2020-03-11
  210. * @returns {String}
  211. */
  212. getIMEI () {
  213. return 'simulator';
  214. },
  215. /**
  216. * 获取IDFA源串
  217. * string.foramt("%s|%s|%s|%s|%s|%s", IMEI, AndroidID, OAID, MAC, IDFA, OpenUUID)
  218. * 安卓不传 IDFA, OpenUUID
  219. * iOS不传 IMEI, AndroidID, OAID
  220. *
  221. * @author Pyden
  222. * @date 2020-03-11
  223. * @returns {String}
  224. */
  225. getIDFA () {
  226. return '';
  227. },
  228. /**
  229. * 获取渠道号 device_getChannelId
  230. *
  231. * @author Pyden
  232. * @date 2020-03-11
  233. * @returns {Integer}
  234. */
  235. getChannelId () {
  236. return G.ChannelId;
  237. },
  238. /**
  239. * 获取APP名称 device_getAppName
  240. *
  241. * @author Pyden
  242. * @date 2020-03-11
  243. * @returns {String}
  244. */
  245. getAppName () {
  246. if (G.MiddleMgr.sdkConfig.appName) {
  247. return G.MiddleMgr.sdkConfig.appName;
  248. } else {
  249. return '神手麻将';
  250. }
  251. },
  252. /**
  253. * 获取APP包名
  254. *
  255. * @author Pyden
  256. * @date 2020-03-11
  257. * @returns {String}
  258. */
  259. getAppPackageName () {
  260. return 'web';
  261. },
  262. /**
  263. * 设置屏幕方向。1:横屏,2:竖屏,3根据用户朝向 device_setOrientation
  264. *
  265. * @author Pyden
  266. * @date 2020-03-11
  267. * @param {Integer} orientation
  268. * @returns {Boolean} 返回值表示是否支持设置屏幕方向
  269. */
  270. setOrientation (orientation) {
  271. return false;
  272. },
  273. /**
  274. * 拨打电话 device_callService
  275. *
  276. * @author Pyden
  277. * @date 2020-03-11
  278. * @param {Integer} uid
  279. * @param {Stirng} phoneNumber 电话号码
  280. * @returns {Boolean} 返回值表示是否支持拨打电话
  281. */
  282. callService (uid, phoneNumber) {
  283. window.location.href = 'tel:' + phoneNumber;
  284. return true;
  285. },
  286. /**
  287. * 展示toast device_toast
  288. *
  289. * @author Pyden
  290. * @date 2020-03-11
  291. * @param {String} msg 展示文案
  292. * @returns {Boolean} 返回值表示是否支持展示toast
  293. */
  294. toast (msg) {
  295. return false;
  296. },
  297. /**
  298. * 拷贝字符串到剪切板 device_copyString
  299. *
  300. * @author Pyden
  301. * @date 2020-03-11
  302. * @param {String} text
  303. * @returns {Boolean} 返回值表示是否拷贝成功
  304. */
  305. copyString (text) {
  306. return false;
  307. },
  308. /**
  309. * 获取剪切板的复制内容 device_getPasteString
  310. *
  311. * @author Pyden
  312. * @date 2020-03-11
  313. * @returns {String} 空字符串表示没有内容
  314. */
  315. getPasteString () {
  316. return '';
  317. },
  318. /**
  319. * 获取中间层持久化数据 device_getPackageInfoStringForKey
  320. *
  321. * @author Pyden
  322. * @date 2020-03-11
  323. * @param {String} key
  324. * @param {String} defValue
  325. * @returns {String}
  326. */
  327. getSharedPreferencesForKey (key, defValue) {
  328. let ret = cc.sys.localStorage.getItem(key);
  329. if (ret == undefined) {
  330. ret = defValue;
  331. }
  332. return ret;
  333. },
  334. /**
  335. * 设置中间层持久化数据 device_setPackageInfoStringForKey
  336. *
  337. * @author Pyden
  338. * @date 2020-03-11
  339. * @param {String} key
  340. * @param {String} value
  341. */
  342. setSharedPreferencesForKey (key, value) {
  343. cc.sys.localStorage.setItem(key, value);
  344. },
  345. /**
  346. * 拍照上传头像 device_camera
  347. *
  348. * @author Pyden
  349. * @date 2020-03-11
  350. * @param {Integer} imageType 1是相册,2是拍照
  351. * @returns {Boolean} 返回值表示是否支持
  352. */
  353. camera (imageType) {
  354. return false;
  355. }
  356. });