| package com.secondworld.sdk; | 
|   | 
|   | 
| import android.Manifest; | 
| import android.app.Activity; | 
| import android.app.AlertDialog; | 
| import android.content.DialogInterface; | 
| import android.content.Intent; | 
| import android.content.pm.PackageManager; | 
| import android.net.Uri; | 
| import android.provider.Settings; | 
| import android.support.v4.app.ActivityCompat; | 
| import android.support.v4.content.ContextCompat; | 
| import android.widget.Toast; | 
|   | 
| import com.secondworld.sdk.utils.CodeA2U; | 
| import com.secondworld.sdk.utils.LogUtil; | 
| import com.secondworld.sdk.utils.RequestCode; | 
| import com.smwl.smsdk.abstrat.SMInitListener; | 
| import com.smwl.smsdk.abstrat.SMLoginListener; | 
| import com.smwl.smsdk.abstrat.SMPayListener; | 
| import com.smwl.smsdk.app.SMPlatformManager; | 
| import com.smwl.smsdk.bean.PayInfo; | 
| import com.smwl.smsdk.bean.RoleInfo; | 
| import com.smwl.smsdk.bean.SMUserInfo; | 
| import com.unity3d.player.UnityPlayer; | 
| import com.secondworld.sdk.PlatformDiff; | 
|   | 
| import org.json.JSONException; | 
| import org.json.JSONObject; | 
|   | 
| public class QuickSdkMgr extends PlatformSdkMgr { | 
|   | 
|     public static QuickSdkMgr I = new QuickSdkMgr(); | 
|   | 
|     String productCode; | 
|     String productKey; | 
|     int REQUEST_RECORD_PERMISSION_SETTING = 110; | 
|   | 
|     private boolean hasPermissions(Activity activity) { | 
|         return (ContextCompat.checkSelfPermission(activity, | 
|                 Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) | 
|                 && (ContextCompat.checkSelfPermission(activity, | 
|                 Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); | 
|     } | 
|   | 
|     public void requestPermissions(Activity activity) { | 
|         try { | 
|             // check权限 | 
| //            if (!hasPermissions(activity)) { | 
| //                // 没有则申请权限 | 
| //                ActivityCompat.requestPermissions(activity, new String[]{ | 
| //                        Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); | 
| //            } else { | 
| //                QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); | 
| //                QuickSdkMgr.I.init(activity); | 
| //            } | 
|             LogUtil.i("requestPermissions","x7申请权限,游戏直接启动初始化"); | 
|             QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); | 
|             QuickSdkMgr.I.init(activity); | 
|         } catch (Exception e) { | 
|             //QuickSdkMgr.I.init(activity); | 
| //            ActivityCompat.requestPermissions(activity, new String[]{ | 
| //                    Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); | 
|         } | 
|     } | 
|   | 
|     public void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) { | 
|         LogUtil.i("onRequestPermissionsResult",String.format("%d-%d", requestCode, grantResults[0])); | 
|         if (requestCode != RequestCode.QUICK) return; | 
| //        if (hasPermissions(activity)) { | 
| //            //申请成功 | 
| //            QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); | 
| //            QuickSdkMgr.I.init(activity); | 
| //            return; | 
| //        } | 
| //        final AlertDialog.Builder normalDialog = new AlertDialog.Builder(activity); | 
| //        normalDialog.setTitle("权限设置"); | 
| //        normalDialog.setMessage("游戏需要部分权限才能正常运行,请前往设置中打开电话权限与存储权限"); | 
| //        normalDialog.setPositiveButton("前往设置", new DialogInterface.OnClickListener() { | 
| //            @Override | 
| //            public void onClick(DialogInterface dialog, int which) { | 
| //                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); | 
| //                Uri uri = Uri.fromParts("package", activity.getPackageName(), null); | 
| //                intent.setData(uri); | 
| //                activity.startActivityForResult(intent, REQUEST_RECORD_PERMISSION_SETTING); | 
| //                dialog.dismiss(); | 
| //            } | 
| //        }); | 
| //        normalDialog.setNegativeButton("退出", new DialogInterface.OnClickListener() { | 
| //            @Override | 
| //            public void onClick(DialogInterface dialog, int which) { | 
| //                GameAppProxy.appExit(); | 
| //            } | 
| //        }); | 
| //        // 显示 | 
| //        normalDialog.show(); | 
|     } | 
|   | 
|     public void onActivityResult(Activity activity, int requestCode) { | 
|         if (requestCode == REQUEST_RECORD_PERMISSION_SETTING) | 
|             requestPermissions(activity); | 
|     } | 
|   | 
|     public void init(Activity activity) { | 
|         sdkInitState = SdkInitState.LOADING; | 
|   | 
|     } | 
|   | 
|     public void login() { | 
|         switch (sdkInitState) { | 
|             case FAILED: | 
|             case UNKNOWN: { | 
|                 if (GameActivityProxy.I.activity == null) | 
|                     return; | 
|                 if (hasPermissions(GameActivityProxy.I.activity)) { | 
|                     Toast.makeText(GameAppProxy.app, "异常请重启游戏", Toast.LENGTH_LONG).show(); | 
|                 } | 
|                 break; | 
|             } | 
|             case SUCCEED: { | 
|                 GameActivityProxy.I.activity.runOnUiThread(new Runnable() | 
|                 { | 
|                     @Override | 
|                     public void run() | 
|                     { | 
|                         //用户登陆进入游戏和用户登出退出游戏的回调 | 
|                         SMPlatformManager.getInstance ().login (GameActivityProxy.I.activity, new SMLoginListener() { | 
|                             @Override | 
|                             public void onLoginSuccess(SMUserInfo loginInfo) { | 
|                                 //客户端登录成功后,会通过如下方式得到token值,游戏客户端传token给自己服务器 | 
|                                 LogUtil.e("SdkManager", "登录成功"); | 
|                                 try { | 
|                                     args.clear(); | 
|                                     JSONObject info = new JSONObject(); | 
|                                     info.put("token", loginInfo.getTokenkey()); | 
|                                     args.put("info", info); | 
|                                     UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk, args); | 
|                                 } catch (JSONException e) { | 
|                                     e.printStackTrace(); | 
|                                     LogUtil.e("SdkManager 登录成功", e); | 
|                                 } | 
|   | 
|                             } | 
|   | 
|                             @Override | 
|                             public void onLoginFailed(String reason) { | 
|                                 LogUtil.e("SdkManager", "登录失败:"); | 
|                                 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); | 
|                             } | 
|   | 
|                             @Override | 
|                             public void onLoginCancell(String reason) { | 
|                                 //登陆取消 | 
|                                 LogUtil.e("SdkManager", "登录失败:"); | 
|                                 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); | 
|                             } | 
|   | 
|                             @Override | 
|                             public void onLogoutSuccess() { | 
|                                 //登出的前提是:已经登录成功了 | 
|                                 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); | 
|                             } | 
|                         }); | 
|                     } | 
|                 }); | 
|                 break; | 
|             } | 
|             case LOADING: { | 
|                 Toast.makeText(GameAppProxy.app, "正在初始化中,请稍等!", Toast.LENGTH_LONG).show(); | 
|                 break; | 
|             } | 
|         } | 
|     } | 
|   | 
|     public void setGameRoleInfo(RoleInfo roleInfo) { | 
|         if (GameActivityProxy.I.activity == null) | 
|             return; | 
|   | 
|         GameActivityProxy.I.activity.runOnUiThread(new Runnable() | 
|         { | 
|             @Override | 
|             public void run() | 
|             { | 
|                 SMPlatformManager.getInstance().smAfterChooseRoleSendInfo(GameActivityProxy.I.activity, roleInfo); | 
|             } | 
|         }); | 
|     } | 
|   | 
|   | 
|     public void pay(PayInfo payInfo) { | 
|         if (GameActivityProxy.I.activity == null) | 
|             return; | 
|         GameActivityProxy.I.activity.runOnUiThread(new Runnable() | 
|         { | 
|             @Override | 
|             public void run() | 
|             { | 
|                 SMPlatformManager.getInstance ().Pay (GameActivityProxy.I.activity, payInfo, new SMPayListener() { | 
|                     @Override | 
|                     public void onPaySuccess(Object obj) { | 
|                         //支付成功 | 
|                         //sdkOrderID:quick订单号 cpOrderID:游戏订单号 | 
|                         UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayOk); | 
|                     } | 
|   | 
|                     @Override | 
|                     public void onPayFailed(Object obj) { | 
|                         //支付失败 | 
|                         UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayFail); | 
|                     } | 
|   | 
|                     @Override | 
|                     public void onPayCancell(Object obj) { | 
|                         //支付取消 | 
|                         UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayCancel); | 
|                     } | 
|                 }); | 
|             } | 
|         }); | 
|     } | 
|   | 
|   | 
|   | 
|     public void register(String productCode, String productKey) { | 
|         this.productCode = productCode; | 
|         this.productKey = productKey; | 
|         //程序的入口执行初始化操作:一般放在游戏入口的activity里面用主线程调用 | 
|         SMPlatformManager.getInstance().init(GameActivityProxy.I.activity, | 
|                 productCode, new SMInitListener() { | 
|                 @Override | 
|                 public void onSuccess() { | 
|                     sdkInitState = SdkInitState.SUCCEED; | 
|                     LogUtil.debug("SdkManager", "初始化成功"); | 
|                     UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk); | 
|                 } | 
|   | 
|                 @Override | 
|                 public void onFail(String reason) { | 
|                     //初始化失败 | 
|                     sdkInitState = SdkInitState.FAILED; | 
|                     LogUtil.e("SdkManager", "初始化失败 msg:" + reason); | 
|                     UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail); | 
|                 } | 
|             }); | 
|     } | 
|   | 
| } |