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.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; import android.support.v4.content.FileProvider; import android.widget.Toast; import com.allugame.freesdk.port.FreePlatform; import com.reyun.tracking.sdk.Tracking; import com.unity3d.player.UnityPlayer; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; 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 = "H2EngineSDK"; 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: init(_activity); break; case CodeU2A.AssetCopy: FileUtil.copyAssets(_activity); 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: FreePlatformUtil.getInstace().init(_activity); break; case CodeU2A.FreePlatformLogin: FreePlatformUtil.getInstace().login(_activity); break; case CodeU2A.FreePlatformSwitchAccount: FreePlatformUtil.getInstace().switchAccount(_activity); break; case CodeU2A.FreePlatformLogout: FreePlatformUtil.getInstace().logout(); break; case CodeU2A.FreePlatformPay: FreePlatformUtil.getInstace().pay(_activity, _json.getString("title"), _json.getString("orderId"), (float) _json.getDouble("mount"), _json.getString("cpInfo")); break; case CodeU2A.PayFinished: Tracking.setPayment(_json.getString("orderID"), _json.getString("payType"), _json.getString("moneyType"), (float) _json.getDouble("money")); break; case CodeU2A.ClientPackage: // ------------------------------- 热云相关 ------------------------------- PackageManager _pkgMgr = _activity.getPackageManager(); ApplicationInfo _appInfo; try { _appInfo = _pkgMgr.getApplicationInfo(_activity.getPackageName(), PackageManager.GET_META_DATA); // 获取热云的appID以及渠道名称 String _trackAppID = _appInfo.metaData.getString("TrackAppID"); String _trackChanelID = _json.getString("clientPkgID"); LogUtil.i(TAG, "热云AppID为: " + _trackAppID + ", 热云渠道ID: " + _trackChanelID); // 初始化热云 Tracking.initWithKeyAndChannelId(_activity, _trackAppID, _trackChanelID); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } 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; } } catch (JSONException e) { e.printStackTrace(); } } // 本地推送 public static void addLocalNotification(Activity activity, int id, String title, String content, long fireTime) { 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) { 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; } 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); // ------------------------------- 自由SDK ------------------------------- FreePlatformUtil.getInstace().init(activity); // ------------------------------- 极光推送 ------------------------------- JPushInterface.setDebugMode(true); JPushInterface.init(activity); while (true) { // 等待获取极光registrationID if (!JPushInterface.getRegistrationID(activity).equals("")) { break; } } _msgStruct.clear(); _msgStruct.put("code", CodeA2U.PushClientID); _msgStruct.put("clientID", JPushInterface.getRegistrationID(activity)); UniversalUtil.sendMessageToUnity(_msgStruct); _msgStruct.clear(); _msgStruct.put("code", CodeA2U.SdkInitComplete); UniversalUtil.sendMessageToUnity(_msgStruct); LogUtil.i(TAG, "初始化执行完毕"); } }).start(); } public static void onCreate(Bundle savedInstanceState) { FreePlatform.getInstance().onCreate(); } public static void onNewIntent(Intent intent) { } public static void onConfigurationChanged(Configuration newConfig) {} public static void onRestart() { } public static void onStart() { FreePlatform.getInstance().onStart(); } public static void onPause() { FreePlatform.getInstance().onPause(); } public static void onResume() { FreePlatform.getInstance().onResume(); } public static void onStop() { FreePlatform.getInstance().onStop(); } public static void onDestroy() { FreePlatform.getInstance().onDestory(); Tracking.exitSdk(); } }