From d96addbbe88584db54bd83d590eb019877908f16 Mon Sep 17 00:00:00 2001
From: lwb <q3213421wrwqr>
Date: 星期四, 21 一月 2021 15:14:05 +0800
Subject: [PATCH] 9527 增加权限请求

---
 Channel/Android/gtgame/release/libs/library-release-gtgame.aar                         |    0 
 SdkProject/library/src/main/java/com/secondworld/sdk/PermissionManager.java            |   60 ++++++++++++++++++++
 SdkProject/library/src/main/java/com/secondworld/sdk/utils/CodeA2U.java                |   10 ++-
 Channel/Android/test/release/libs/library-release-test.aar                             |    0 
 Channel/Android/test/debug/libs/library-debug-test.aar                                 |    0 
 SdkProject/channel/GTGame/java/com/secondworld/sdk/MySdkMgr.java                       |   45 ++++----------
 SdkProject/library/src/main/java/com/secondworld/sdk/UnityMsgHandler.java              |   16 ++---
 SdkProject/app/src/main/java/com/secondworld/demo/MainActivity.java                    |    9 ++
 SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdInit.java              |    6 -
 Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar                             |    0 
 SdkProject/library/src/main/AndroidManifest.xml                                        |    2 
 SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdRequestPermission.java |    9 ++-
 SdkProject/library/src/main/java/com/secondworld/sdk/utils/BatteryUtil.java            |    6 -
 SdkProject/library/src/main/java/com/secondworld/sdk/GameActivityProxy.java            |    4 
 SdkProject/library/src/main/java/com/secondworld/sdk/utils/FileUtil.java               |    7 -
 15 files changed, 111 insertions(+), 63 deletions(-)

diff --git a/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar b/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar
index 3d69ac6..2834ed1 100644
--- a/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar
+++ b/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar
Binary files differ
diff --git a/Channel/Android/gtgame/release/libs/library-release-gtgame.aar b/Channel/Android/gtgame/release/libs/library-release-gtgame.aar
index 0673439..48e943f 100644
--- a/Channel/Android/gtgame/release/libs/library-release-gtgame.aar
+++ b/Channel/Android/gtgame/release/libs/library-release-gtgame.aar
Binary files differ
diff --git a/Channel/Android/test/debug/libs/library-debug-test.aar b/Channel/Android/test/debug/libs/library-debug-test.aar
index 24b5581..7472515 100644
--- a/Channel/Android/test/debug/libs/library-debug-test.aar
+++ b/Channel/Android/test/debug/libs/library-debug-test.aar
Binary files differ
diff --git a/Channel/Android/test/release/libs/library-release-test.aar b/Channel/Android/test/release/libs/library-release-test.aar
index 5d65c67..bab69a5 100644
--- a/Channel/Android/test/release/libs/library-release-test.aar
+++ b/Channel/Android/test/release/libs/library-release-test.aar
Binary files differ
diff --git a/SdkProject/app/src/main/java/com/secondworld/demo/MainActivity.java b/SdkProject/app/src/main/java/com/secondworld/demo/MainActivity.java
index c5b668c..c0fc998 100644
--- a/SdkProject/app/src/main/java/com/secondworld/demo/MainActivity.java
+++ b/SdkProject/app/src/main/java/com/secondworld/demo/MainActivity.java
@@ -73,7 +73,14 @@
         }));
 
         findViewById(R.id.btnA).setOnClickListener(v -> {
-            unityMessage(CodeU2A.GoToReview);
+            JSONObject json = new JSONObject();
+            try {
+                json.put("code", CodeU2A.RequestPermission);
+                json.put("permission", "android.permission.RECORD_AUDIO");
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+            UnityMsgHandler.onUnityMessage(json.toString());
         });
 
         findViewById(R.id.btnB).setOnClickListener(v -> {
diff --git a/SdkProject/channel/GTGame/java/com/secondworld/sdk/MySdkMgr.java b/SdkProject/channel/GTGame/java/com/secondworld/sdk/MySdkMgr.java
index 9612ed8..991d060 100644
--- a/SdkProject/channel/GTGame/java/com/secondworld/sdk/MySdkMgr.java
+++ b/SdkProject/channel/GTGame/java/com/secondworld/sdk/MySdkMgr.java
@@ -59,18 +59,14 @@
             public void onSuccess() {
                 sdkInitState = SdkInitState.SUCCEED;
                 LogUtil.debug("SdkManager", "鍒濆鍖栨垚鍔�");
-                args.clear();
-                args.put("code", CodeA2U.PlatformInitOk);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk);
             }
 
             @Override
             public void onError(String msg) {
                 sdkInitState = SdkInitState.FAILED;
                 LogUtil.e("SdkManager", "鍒濆鍖栧け璐ワ細" + msg);
-                args.clear();
-                args.put("code", CodeA2U.PlatformInitFail);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail);
             }
         });
 
@@ -85,10 +81,8 @@
                     info.put("account", SdkManager.getInstance().getUid());
                     info.put("game_id", SdkManager.getInstance().getGameId());
                     info.put("session_id", SdkManager.getInstance().getSessionId());
-
-                    args.put("code", CodeA2U.PlatformLoginOk);
                     args.put("info", info);
-                    UnityMsgHandler.sendMessageToUnity(args);
+                    UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk,args);
                 } catch (JSONException e) {
                     e.printStackTrace();
                     LogUtil.e("SdkManager 鐧诲綍鎴愬姛", e);
@@ -100,24 +94,19 @@
             public void onSuccess(Boolean isNewReg, String reg_type) {
                 LogUtil.e("SdkManager", "娉ㄥ唽鎴愬姛" + " isNewReg锛�" + isNewReg + "  type锛�" + reg_type);
                 args.clear();
-                args.put("code", CodeA2U.PlatformRegisterOk);
                 args.put("reg_type", reg_type);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformRegisterOk,args);
             }
 
             @Override
             public void onError(String s) {
                 LogUtil.e("SdkManager", "鐧诲綍澶辫触锛�" + s);
-                args.clear();
-                args.put("code", CodeA2U.PlatformLoginFail);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail);
             }
 
             @Override
             public void onCancel() {
-                args.clear();
-                args.put("code", CodeA2U.PlatformLoginFail);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail);
             }
         });
 
@@ -146,9 +135,7 @@
             @Override
             public void onSuccess() {
                 //娉ㄩ攢鎴愬姛,闇�瑕佹妸娓告垙鍒囨崲鍥炵櫥闄嗗墠鐨勫満鏅�,骞堕噸鏂板脊鍑虹櫥褰曟绛夋搷浣�
-                args.clear();
-                args.put("code", CodeA2U.PlatformLogoutOk);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk);
             }
 
             @Override
@@ -189,27 +176,24 @@
             @Override
             public void onSuccess(String type) {
                 Map<String, Object> args = new HashMap<>();
-                args.put("code", CodeA2U.ShareState);
                 args.put("state", CallBackState.Success);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.ShareState,args);
                 LogUtil.debug("鍒嗕韩鍥炶皟", "onSuccess锛�" + type);
             }
 
             @Override
             public void onError(String type, String msg) {
                 Map<String, Object> args = new HashMap<>();
-                args.put("code", CodeA2U.ShareState);
                 args.put("state", CallBackState.Error);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.ShareState,args);
                 LogUtil.debug("鍒嗕韩鍥炶皟", "type锛�" + type + ";msg锛�" + msg);
             }
 
             @Override
             public void onCancel(String type) {
                 Map<String, Object> args = new HashMap<>();
-                args.put("code", CodeA2U.ShareState);
                 args.put("state", CallBackState.Cancel);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity( CodeA2U.ShareState,args);
                 LogUtil.debug("鍒嗕韩鍥炶皟", type + "锛歰nCancel");
             }
         });
@@ -219,27 +203,24 @@
             @Override
             public void onSuccess() {
                 Map<String, Object> args = new HashMap<>();
-                args.put("code", CodeA2U.ReviewState);
                 args.put("state", CallBackState.Success);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.ReviewState,args);
                 LogUtil.debug("璇勫垎鍥炶皟", "鎴愬姛");
             }
 
             @Override
             public void onError(String s) {
                 Map<String, Object> args = new HashMap<>();
-                args.put("code", CodeA2U.ReviewState);
                 args.put("state", CallBackState.Error);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.ReviewState,args);
                 LogUtil.debug("璇勫垎鍥炶皟", "澶辫触锛�" + s);
             }
 
             @Override
             public void onCancel() {
                 Map<String, Object> args = new HashMap<>();
-                args.put("code", CodeA2U.ReviewState);
                 args.put("state", CallBackState.Cancel);
-                UnityMsgHandler.sendMessageToUnity(args);
+                UnityMsgHandler.sendMessageToUnity(CodeA2U.ReviewState,args);
                 LogUtil.debug("璇勫垎鍥炶皟", "鍙栨秷");
             }
         });
diff --git a/SdkProject/library/src/main/AndroidManifest.xml b/SdkProject/library/src/main/AndroidManifest.xml
index a73b212..2db666b 100644
--- a/SdkProject/library/src/main/AndroidManifest.xml
+++ b/SdkProject/library/src/main/AndroidManifest.xml
@@ -9,6 +9,8 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <!-- 鑾峰彇MAC鍦板潃-->
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <!-- 褰曢煶 -->
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 
     <application
         android:name="com.secondworld.sdk.GameApp"
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivityProxy.java b/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivityProxy.java
index e146f63..00de247 100644
--- a/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivityProxy.java
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivityProxy.java
@@ -35,12 +35,12 @@
     }
 
     public void onDestroy() {
-        activity=null;
+        activity = null;
         I = null;
     }
 
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
-
+        PermissionManager.I.onRequestPermissionsResult(activity,requestCode, permissions, grantResults);
     }
 
 }
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/PermissionManager.java b/SdkProject/library/src/main/java/com/secondworld/sdk/PermissionManager.java
new file mode 100644
index 0000000..7163eac
--- /dev/null
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/PermissionManager.java
@@ -0,0 +1,60 @@
+package com.secondworld.sdk;
+
+import android.app.Activity;
+import android.content.pm.PackageManager;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.PermissionChecker;
+
+import com.secondworld.sdk.utils.CallBackState;
+import com.secondworld.sdk.utils.CodeA2U;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鏉冮檺绠$悊
+ */
+public class PermissionManager {
+
+    public static PermissionManager I = new PermissionManager();
+
+    private static final int  REQUEST_CODE = 9527;
+
+    /**
+     * 鏌ヨ鏄惁鏈夋潈闄�
+     */
+    public boolean hasPermission(String permission) {
+        return ContextCompat.checkSelfPermission(GameApp.I, permission) == PackageManager.PERMISSION_GRANTED
+                && PermissionChecker.checkSelfPermission(GameApp.I, permission) == PackageManager.PERMISSION_GRANTED;
+    }
+
+    /**
+     * 璇锋眰鏉冮檺
+     */
+    public void requestPermissions(String permission) {
+        if (GameActivityProxy.I == null || GameActivityProxy.I.activity == null)
+            return;
+        ActivityCompat.requestPermissions(GameActivityProxy.I.activity, new String[]{permission}, REQUEST_CODE);
+    }
+
+
+    public void onRequestPermissionsResult(Activity activity, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        if (activity == null||permissions.length==0||requestCode!=REQUEST_CODE)
+            return;
+        Map<String, Object> map = new HashMap<>();
+        map.put("permission",permissions[0]);
+        if (hasPermission(permissions[0])) {
+            map.put("state", CallBackState.Success);
+        } else {
+            if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[0])) {//鐢ㄦ埛鎷掔粷锛屾湭鍕鹃�夈�愪笉鍐嶆彁绀恒��
+                map.put("state", CallBackState.Cancel);
+            } else {//鐢ㄦ埛鎷掔粷涓斿嬀閫変簡銆愪笉鍐嶆彁绀恒��
+                map.put("state", CallBackState.Error);
+            }
+        }
+        UnityMsgHandler.sendMessageToUnity(CodeA2U.PermissionCallBack, map);
+    }
+
+}
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/UnityMsgHandler.java b/SdkProject/library/src/main/java/com/secondworld/sdk/UnityMsgHandler.java
index 6397444..9077d87 100644
--- a/SdkProject/library/src/main/java/com/secondworld/sdk/UnityMsgHandler.java
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/UnityMsgHandler.java
@@ -87,21 +87,19 @@
     }
 
     public static void sendMessageToUnity(int code) {
-        Map<String, Object> args = new HashMap<>();
-        args.put("code", code);
-        UnityMsgHandler.sendMessageToUnity(args);
+        UnityMsgHandler.sendMessageToUnity(code,null);
     }
 
     /**
      * 鍙戦�佹秷鎭埌unity
      *
-     * @param jsonMap
+     * @param args
      */
-    public static void sendMessageToUnity(Map<String, Object> jsonMap) {
-        if (jsonMap == null || jsonMap.isEmpty()) {
-            return;
-        }
-        JSONObject jsonObject = new JSONObject(jsonMap);
+    public static void sendMessageToUnity(int code, Map<String, Object> args) {
+        if (args == null)
+            args = new HashMap<>();
+        args.put("code", code);
+        JSONObject jsonObject = new JSONObject(args);
         if (GameApp.I.isDemo()) {
             LogUtil.debug("鍙戦�佹秷鎭埌unity", jsonObject.toString());
             return;
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdInit.java b/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdInit.java
index be1dc88..1e54fda 100644
--- a/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdInit.java
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdInit.java
@@ -49,19 +49,17 @@
         }
         //鍙戦�佽澶囦俊鎭�
         Map<String, Object> _msgStruct = new HashMap<>();
-        _msgStruct.put("code", CodeA2U.DeviceInfo);
         _msgStruct.put("userAgent", System.getProperty("http.agent"));
         _msgStruct.put("mac", DeviceUtil.getLocalMac());
         _msgStruct.put("imei", "");
         _msgStruct.put("android_id", DeviceUtil.getAndroidId());
         _msgStruct.put("unique_id", DeviceUtil.getUniqueID());
         _msgStruct.put("memoryTotal", size);
-        UnityMsgHandler.sendMessageToUnity(_msgStruct);
+        UnityMsgHandler.sendMessageToUnity(CodeA2U.DeviceInfo,_msgStruct);
         //閫氱煡sdk鍒濆鍖栧畬鎴�
         _msgStruct.clear();
-        _msgStruct.put("code", CodeA2U.SdkInitComplete);
         _msgStruct.put("channelPlatform", PlatformDiff.I.platformName());
-        UnityMsgHandler.sendMessageToUnity(_msgStruct);
+        UnityMsgHandler.sendMessageToUnity(CodeA2U.SdkInitComplete,_msgStruct);
         LogUtil.debug("CmdInit", "Sdk鍒濆鍖栧畬鎴�");
     }
 }
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdRequestPermission.java b/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdRequestPermission.java
index 97cc5a8..87611bf 100644
--- a/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdRequestPermission.java
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdRequestPermission.java
@@ -1,10 +1,12 @@
 package com.secondworld.sdk.command;
 
+import com.secondworld.sdk.PermissionManager;
 import com.secondworld.sdk.utils.CodeU2A;
 
+import org.json.JSONException;
 import org.json.JSONObject;
 
-public class CmdRequestPermission implements  ICommand {
+public class CmdRequestPermission implements ICommand {
 
     @Override
     public int getCode() {
@@ -12,7 +14,8 @@
     }
 
     @Override
-    public void process(JSONObject json) {
-
+    public void process(JSONObject json) throws JSONException {
+        String permission = json.getString("permission");
+        PermissionManager.I.requestPermissions(permission);
     }
 }
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/utils/BatteryUtil.java b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/BatteryUtil.java
index fb23cc1..b72978e 100644
--- a/SdkProject/library/src/main/java/com/secondworld/sdk/utils/BatteryUtil.java
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/BatteryUtil.java
@@ -68,10 +68,9 @@
 
                 if (_batteryLevel != m_BatteryLevel) {
                     try {
-                        _msg.put("code", CodeA2U.BatteryLevel);
                         _msg.put("level", _batteryLevel);
 
-                        UnityMsgHandler.sendMessageToUnity(_msg);
+                        UnityMsgHandler.sendMessageToUnity(CodeA2U.BatteryLevel,_msg);
 
                         m_BatteryLevel = _batteryLevel;
 
@@ -95,10 +94,9 @@
                         _transCode = 3;
                     }
 
-                    _msg.put("code", CodeA2U.BatteryCharging);
                     _msg.put("status", _transCode);
 
-                    UnityMsgHandler.sendMessageToUnity(_msg);
+                    UnityMsgHandler.sendMessageToUnity(CodeA2U.BatteryCharging,_msg);
 
                     m_Status = _status;
                 }
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/utils/CodeA2U.java b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/CodeA2U.java
index 60c29f1..bebb6ab 100644
--- a/SdkProject/library/src/main/java/com/secondworld/sdk/utils/CodeA2U.java
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/CodeA2U.java
@@ -19,15 +19,15 @@
     int BatteryCharging = 2;
     /**
      * 鍥炶皟sdk閫昏緫瀹屾瘯
-     * */
+     */
     int SdkInitComplete = 3;
     /**
      * 鍥炶皟android璁惧淇℃伅
-     * */
+     */
     int DeviceInfo = 4;
     /**
      * 鍥炶皟鎺ㄩ�佺殑鐙珛id
-     * */
+     */
     int PushClientID = 5;
     /**
      * 鍥炶皟澶栭儴瀛樺偍鏍圭洰褰曞湴鍧�
@@ -37,6 +37,10 @@
      * 瑙﹀彂浜嗛��鍑烘父鎴忛�昏緫, 鎵撳紑浜屾纭鐣岄潰
      */
     int ExitGame = 7;
+    /**
+     * 鏉冮檺鐢宠缁撴灉
+     */
+    int PermissionCallBack = 8;
 
     // 鑷敱sdk_code
     int PlatformInitOk = 100;
diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/utils/FileUtil.java b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/FileUtil.java
index 173dbf4..8cefb12 100644
--- a/SdkProject/library/src/main/java/com/secondworld/sdk/utils/FileUtil.java
+++ b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/FileUtil.java
@@ -33,9 +33,7 @@
 
         if (installVer == currentVer) {
             LogUtil.i("copyAssets", "宸叉嫹璐濊繃锛宨nstallVer:" + installVer + "锛�" + "currentVer:" + currentVer);
-            Map<String, Object> _msg = new HashMap<>();
-            _msg.put("code", CodeA2U.AssetCopyFinished);
-            UnityMsgHandler.sendMessageToUnity(_msg);
+            UnityMsgHandler.sendMessageToUnity(CodeA2U.AssetCopyFinished);
             return;
         }
 
@@ -53,8 +51,7 @@
             // 瀛樺偍姝ゆ鐨勬嫹璐濈増鏈�
             SPUtils.get().edit().putLong(SPUtils.LAST_COPY_VERSION, currentVer).apply();
             Map<String, Object> _msg = new HashMap<>();
-            _msg.put("code", CodeA2U.AssetCopyFinished);
-            UnityMsgHandler.sendMessageToUnity(_msg);
+            UnityMsgHandler.sendMessageToUnity(CodeA2U.AssetCopyFinished);
         } catch (Exception e) {
             e.printStackTrace();
         }

--
Gitblit v1.8.0