| 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 com.secondworld.sdk.utils.RequestCode; | 
|   | 
| import java.util.HashMap; | 
| import java.util.Map; | 
|   | 
| /** | 
|  * 权限管理 | 
|  */ | 
| public class PermissionManager { | 
|   | 
|     public static PermissionManager I = new PermissionManager(); | 
|   | 
|     /** | 
|      * 查询是否有权限 | 
|      */ | 
|     public boolean hasPermission(String permission) { | 
|         return ContextCompat.checkSelfPermission(GameAppProxy.app, permission) == PackageManager.PERMISSION_GRANTED | 
|                 && PermissionChecker.checkSelfPermission(GameAppProxy.app, 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}, RequestCode.UNITY); | 
|     } | 
|   | 
|   | 
|     public void onRequestPermissionsResult(Activity activity, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | 
|         if (activity == null || permissions.length == 0 || requestCode != RequestCode.UNITY) | 
|             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); | 
|     } | 
|   | 
| } |