package com.secondworld.univeralsdk; import android.app.Activity; import android.app.AlertDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; import android.widget.Toast; import com.aoyou.sdk.SDKManager; import com.aoyou.sdk.domain.LogoutErrorMsg; import com.aoyou.sdk.domain.LogoutcallBack; import com.aoyou.sdk.domain.OnLogoutListener; import com.reyun.tracking.sdk.Tracking; import com.ss.android.common.applog.TeaAgent; import com.ss.android.common.applog.TeaConfigBuilder; import com.ss.android.common.lib.EventUtils; import com.unity3d.player.UnityPlayer; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.util.HashMap; import java.util.Map; import cn.jpush.android.api.JPushInterface; import cn.jpush.android.data.JPushLocalNotification; public class H2EngineSDK { private static final String TAG = "com.secondworld.univeralsdk.H2EngineSDK"; private static String APP_ID = ""; private static boolean PushEnable = true; public static void HandleUnityMessage(String json) { LogUtil.i(TAG, "收到Unity发来的信息: " + json); Activity _activity = UnityPlayer.currentActivity; try { JSONObject _json = new JSONObject(json); int _code = _json.getInt("code"); switch (_code) { case CodeU2A.Init: APP_ID = _json.getString("appID"); init(_activity); break; case CodeU2A.AssetCopy: FileUtil.copyAssets(_activity); break; case CodeU2A.CopyOneAsset: FileUtil.copy(_activity, _json.getString("fileName")); break; case CodeU2A.BatteryListenStart: BatteryUtil.getInstance().start(_activity); break; case CodeU2A.BatteryListenStop: BatteryUtil.getInstance().stop(_activity); break; case CodeU2A.UniqueID: break; case CodeU2A.CopyContent: CopyContent(_activity, _json.getString("content")); break; case CodeU2A.OpenWebView: WebViewUtil.OpenWebView(_activity, _json.getString("url")); break; case CodeU2A.RestartApp: RestartApp(_activity); break; case CodeU2A.InstallAPK: InstallApp(_activity, _json.getString("path")); break; case CodeU2A.ExteneralStorage: GetExternalStorage(); break; case CodeU2A.RequestPermission: break; case CodeU2A.RequestManifestPermissions: break; case CodeU2A.FreePlatformInit: YLPlatformUtil.getInstance().init(_activity); break; case CodeU2A.FreePlatformLogin: YLPlatformUtil.getInstance().login(_activity); break; case CodeU2A.FreePlatformSwitchAccount: break; case CodeU2A.FreePlatformLogout: // YLPlatformUtil.getInstance().logout(_activity); break; case CodeU2A.FreePlatformPay: JSONObject _extraData = new JSONObject(); _extraData.put("appid", APP_ID); _extraData.put("cpinfo", _json.getString("cpInfo")); _extraData.put("cporderid", _json.getString("orderId")); if (APP_ID.equals("yilexbqy")) { _extraData.put("productid", "xbqy"); } else { _extraData.put("productid", "snxxz"); } YLPlatformUtil.getInstance().pay(_activity, _json.getString("title"), _json.getString("mount"), _json.getString("roleID"), _extraData.toString(), // "", _json.getString("sid")); YLPlatformUtil.getInstance().payProcessing = true; break; case CodeU2A.PayFinished: Tracking.setPayment(_json.getString("orderID"), _json.getString("payType"), _json.getString("moneyType"), (float) _json.getDouble("money")); int _money = (int) (_json.getDouble("money")); EventUtils.setPurchase("", "", "", 1, _json.getString("payType"), _json.getString("moneyType"), true, _money); YLPlatformUtil.getInstance().payProcessing = false; break; case CodeU2A.CreateRole: break; case CodeU2A.RoleLogin: YLPlatformUtil.getInstance().enterWorld(_activity, _json.getString("roleID"), _json.getString( "roleName").trim().replace(" ", ""), _json.getString("level"), _json.getString("sid"), _json.getString("serverName"), null); break; case CodeU2A.ClientPackage: // 初始化热云 Tracking.initWithKeyAndChannelId(_activity, UniversalUtil.getMetaString(_activity, "TrackAppID"), _json.getString("clientPkgID")); break; case CodeU2A.JPushAddLocalMessage: addLocalNotification(_activity, _json.getInt("id"), _json.getString("title"), _json.getString("content"), _json.getLong("fireTime")); break; case CodeU2A.JPushRemoveLocalMessage: removeNotification(_activity, _json.getInt("id")); break; case CodeU2A.SendRegistEvent: YLPlatformUtil.getInstance().SendRegisterEvent(); break; case CodeU2A.SendLoginEvent: YLPlatformUtil.getInstance().SendLoginEvent(); break; } } catch (JSONException e) { e.printStackTrace(); } } // 本地推送 public static void addLocalNotification(Activity activity, int id, String title, String content, long fireTime) { if (PushEnable) { try { JPushLocalNotification ln = new JPushLocalNotification(); ln.setBuilderId(0);// 设置样式 ln.setNotificationId(id);// id ln.setTitle(title);// 标题 ln.setContent(content);// 内容 ln.setBroadcastTime(fireTime);// 等待时间 JPushInterface.addLocalNotification(activity, ln); } catch (Exception e) { e.printStackTrace(); } } } public static void removeNotification(Activity activity, int id) { if (PushEnable) { JPushInterface.removeLocalNotification(activity, id); } } public static void GetExternalStorage() { Map _msg = new HashMap<>(); _msg.put("code", CodeA2U.ExternalStorage); _msg.put("path", Environment.getExternalStorageDirectory().getAbsolutePath()); UniversalUtil.sendMessageToUnity(_msg); } public static void InstallApp(Activity activity, String path) { File _file = new File(path); if (_file == null) { LogUtil.i(TAG, "找不到给定地址的apk: " + path); return; } try { Intent _intent = new Intent(Intent.ACTION_VIEW); // if (Build.VERSION.SDK_INT >= 23) // { // _intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Uri _contentUri = FileProvider.getUriForFile(activity, // "com.shandangceshi.snxxz.fileProvider", // _file); // _intent.setDataAndType(_contentUri, "application/vnd.android.package-archive"); // // } // else // { _intent.setDataAndType(Uri.fromFile(_file), "application/vnd.android.package-archive"); _intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // } activity.startActivity(_intent); } catch (Exception e) { e.printStackTrace(); Toast.makeText(activity, "没有找到打开此类文件的程序", Toast.LENGTH_SHORT).show(); } } public static void CopyContent(final Activity activity, final String content) { activity.runOnUiThread(new Runnable() { @Override public void run() { ClipboardManager _mgr = (ClipboardManager) activity.getSystemService( Context.CLIPBOARD_SERVICE); ClipData _data = ClipData.newPlainText("playerId", content); _mgr.setPrimaryClip(_data); } }); } public static void RestartApp(final Activity activity) { activity.runOnUiThread(new Runnable() { @Override public void run() { new Thread() { public void run() { String _pn = activity.getPackageName(); PackageManager _pm = activity.getPackageManager(); Intent _l = _pm.getLaunchIntentForPackage(_pn); _l.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); activity.startActivity(_l); android.os.Process.killProcess(android.os.Process.myPid()); } }.start(); activity.finish(); } }); } public static void init(final Activity activity) { final int _memoryTotal = (int) (UniversalUtil.getMemTotal() / 1024); if (_memoryTotal < 1024) { LogUtil.i(TAG, "检测设备内存不满足运行程序标准"); AlertDialog.Builder _builder = new AlertDialog.Builder(activity); _builder.setIcon(R.drawable.app_icon); _builder.setTitle("警告"); _builder.setMessage("您的手机内存不足,无法正常运行游戏"); _builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { android.os.Process.killProcess(android.os.Process.myPid()); } }); _builder.show(); return; } PushEnable = activity.getPackageName().equals("com.yiru.menhtj"); new Thread(new Runnable() { @Override public void run() { LogUtil.i(TAG, "开始执行初始化"); GetExternalStorage(); // ------------------------------- 设备信息 ------------------------------- Map _msgStruct = new HashMap<>(); _msgStruct.put("code", CodeA2U.DeviceInfo); _msgStruct.put("userAgent", System.getProperty("http.agent")); _msgStruct.put("mac", UniqueID.getLocalMac(activity)); _msgStruct.put("imei", UniqueID.getDeviceId(activity)); _msgStruct.put("android_id", Settings.System.getString(activity.getContentResolver(), Settings.System.ANDROID_ID)); _msgStruct.put("unique_id", UniqueID.get(activity)); _msgStruct.put("memoryTotal", _memoryTotal); UniversalUtil.sendMessageToUnity(_msgStruct); // ------------------------------- 极光推送 ------------------------------- String _registrationID = "0"; if (PushEnable) { JPushInterface.setDebugMode(true); JPushInterface.init(activity); final long _waitingTime = System.currentTimeMillis(); while (true) { // 等待获取极光registrationID if (!JPushInterface.getRegistrationID(activity).equals("")) { _registrationID = JPushInterface.getRegistrationID(activity); break; } long _escapeTime = System.currentTimeMillis() - _waitingTime; if (_escapeTime > 3000) { LogUtil.w(TAG, "等待获取极光推送registrationID超时: 3秒"); break; } } } _msgStruct.clear(); _msgStruct.put("code", CodeA2U.PushClientID); _msgStruct.put("clientID", _registrationID); UniversalUtil.sendMessageToUnity(_msgStruct); _msgStruct.clear(); _msgStruct.put("code", CodeA2U.SdkInitComplete); _msgStruct.put("channelPlatform", "yl"); UniversalUtil.sendMessageToUnity(_msgStruct); LogUtil.i(TAG, "初始化执行完毕"); } }).start(); } public static void onCreate(Activity activity, Bundle savedInstanceState) { // ------------------------------- 猫耳SDK ------------------------------- YLPlatformUtil.getInstance().init(activity); TeaAgent.init(TeaConfigBuilder.create(activity) .setAppName(UniversalUtil.getMetaString(activity, "TouTiao_AppName")) .setChannel(UniversalUtil.getMetaString(activity, "TouTiao_Chanel")) .setAid(UniversalUtil.getMetaInt(activity, "TouTiao_AppID")) .createTeaConfig()); TeaAgent.setDebug(true); } private static boolean m_IsFocus = true; public static void onWindowFocusChanged(boolean b) { if (YLPlatformUtil.getInstance().payProcessing) { if (b) { Map _msgStruct = new HashMap<>(); _msgStruct.put("code", CodeA2U.FreePlatformPayCancel); UniversalUtil.sendMessageToUnity(_msgStruct); YLPlatformUtil.getInstance().payProcessing = false; } } } public static void onNewIntent(final Activity activity, final Intent intent) { } public static void onActivityResult(int requestCode, int resultCode, final Intent data, final Activity activity) { } public static void onConfigurationChanged(final Configuration newConfig) {} public static void onRestart(final Activity activity) { } public static void onStart(final Activity activity) { } public static void onPause(final Activity activity) { TeaAgent.onPause(activity); } public static void onResume(final Activity activity) { SDKManager.getInstance(activity).showFloatView(new OnLogoutListener() { @Override public void logoutSuccess(LogoutcallBack logoutcallBack) { Map m_Message = new HashMap<>(); m_Message.put("code", CodeA2U.FreePlatformLogoutOk); UniversalUtil.sendMessageToUnity(m_Message); } @Override public void logoutError(LogoutErrorMsg logoutErrorMsg) { Map m_Message = new HashMap<>(); m_Message.put("code", CodeA2U.FreePlatformLogoutFail); UniversalUtil.sendMessageToUnity(m_Message); } }); if (YLPlatformUtil.getInstance().payProcessing) { Map _msgStruct = new HashMap<>(); _msgStruct.put("code", CodeA2U.FreePlatformPayCancel); UniversalUtil.sendMessageToUnity(_msgStruct); YLPlatformUtil.getInstance().payProcessing = false; } TeaAgent.onResume(activity); } public static void onStop(final Activity activity) { SDKManager.getInstance(activity).removeFloatView(); } public static void onDestroy(final Activity activity) { Tracking.exitSdk(); } }