Project/ky_sdk/build.gradle | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Project/ky_sdk/src/game_ky/java/com/secondworld/univeralsdk/H2EngineSDK.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Project/ky_sdk/src/main/AndroidManifest.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Project/ky_sdk/src/main/java/com/secondworld/univeralsdk/AppPermissionUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Project/ky_sdk/src/main/java/com/secondworld/univeralsdk/MainActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Project/ky_sdk/src/main/java/com/secondworld/univeralsdk/RequestPermissionsHelpActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Project/ky_sdk/build.gradle
@@ -5,8 +5,8 @@ defaultConfig { //applicationId "com.secondworld.univeralsdk" minSdkVersion 22 targetSdkVersion 22 minSdkVersion 23 targetSdkVersion 23 versionCode 1 versionName "1.1.0" } Project/ky_sdk/src/game_ky/java/com/secondworld/univeralsdk/H2EngineSDK.java
@@ -1,5 +1,6 @@ package com.secondworld.univeralsdk; import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.content.ClipData; @@ -411,6 +412,23 @@ public static void onCreate(Activity activity, Bundle savedInstanceState) { AppPermissionUtil.requestPermissions(activity, new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_PHONE_STATE },new AppPermissionUtil.OnPermissionListener() { @Override public void onPermissionGranted() { //授权 } @Override public void onPermissionDenied() { //没有授权,或者有一个权限没有授权 } }); // ------------------------------- 猫耳SDK ------------------------------- KYPlatformUtil.getInstance().init(activity); Project/ky_sdk/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.secondworld.univeralsdk" xmlns:tools="http://schemas.android.com/tools" android:installLocation="auto" android:versionCode="1" android:versionName="1.1.0"> @@ -71,6 +72,7 @@ android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection" android:label="@string/app_name" android:launchMode="singleTask" tools:replace="android:configChanges" android:screenOrientation="sensorLandscape"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -171,6 +173,12 @@ </intent-filter> </receiver> <activity android:name="com.secondworld.univeralsdk.RequestPermissionsHelpActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.NoTitleBar"> </activity> <!-- Required SDK核心功能--> <activity android:name="cn.jpush.android.ui.PushActivity" Project/ky_sdk/src/main/java/com/secondworld/univeralsdk/AppPermissionUtil.java
New file @@ -0,0 +1,38 @@ package com.secondworld.univeralsdk; import android.content.Context; import android.os.Build; /** * Created by Administrator on 2019/10/20 0020. */ public class AppPermissionUtil { /** * 去请求所有权限 * @param context * @param permissions 需要请求的权限列表 * @param listener 请求权限回调 */ public static void requestPermissions(Context context, String[] permissions, OnPermissionListener listener) { if(context==null||listener==null){ throw new NullPointerException("context参数为空,或者listener参数为空"); } if (Build.VERSION.SDK_INT <= 22) { //SDK小于22之前的版本之前发返回权限允许 listener.onPermissionGranted(); } else { //打开一个一像素的activity去请求权限,并回调返回结果 RequestPermissionsHelpActivity.start(context,permissions,listener); } } public interface OnPermissionListener { void onPermissionGranted();//授权 void onPermissionDenied();//拒绝 } } Project/ky_sdk/src/main/java/com/secondworld/univeralsdk/MainActivity.java
@@ -10,13 +10,20 @@ import android.os.Bundle; import android.os.Process; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v4.content.PermissionChecker; import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.view.KeyEvent; import com.unity3d.player.UnityPlayerActivity; import java.util.ArrayList; import java.util.List; public class MainActivity extends UnityPlayerActivity { @@ -215,6 +222,6 @@ { KYPlatformUtil.getInstance().logout(); } return super.onKeyDown(i, keyEvent); return false; } } Project/ky_sdk/src/main/java/com/secondworld/univeralsdk/RequestPermissionsHelpActivity.java
New file @@ -0,0 +1,193 @@ package com.secondworld.univeralsdk; import android.app.Activity; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.view.Gravity; import android.view.Window; import android.view.WindowManager; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * Created by Administrator on 2019/10/20 0020. */ public class RequestPermissionsHelpActivity extends Activity { private int requestCode; //设计两个OnPermissionListener的原因是,有效缓解并发请求权限时,OnPermissionListener公用一个会引发回调错乱或没法回调的问题 private static AppPermissionUtil.OnPermissionListener transferOnPermissionListener;//这个静态变量充当一个传递者的角色,传递给mOnPermissionListener变量后,就释放引用了 private AppPermissionUtil.OnPermissionListener mOnPermissionListener;//这个才是我们每次权限请求使用的回调监听 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //1像素的activity Window window = getWindow(); window.setGravity(Gravity.LEFT | Gravity.TOP); WindowManager.LayoutParams params = window.getAttributes(); params.x = 0; params.y = 0; params.height = 1; params.width = 1; window.setAttributes(params); //获取界面传过来的值 getIntentData(); } private void getIntentData() { //获取传递过来回调监听 mOnPermissionListener = transferOnPermissionListener; transferOnPermissionListener = null; //传过来的需要申请的权限 String[] permissions = getIntent().getStringArrayExtra("permissions"); if (permissions != null && permissions.length > 0) { requestPermissions(permissions); } else { //手动报错提示 throw new NullPointerException("申请的权限列表不能为空!"); } } /** * 去申请所有权限 * * @param permissions */ @TargetApi(Build.VERSION_CODES.M) private void requestPermissions(String[] permissions) { Random random = new Random(); requestCode = random.nextInt(1000); List<String> deniedPermissions = getDeniedPermissions(permissions); if (deniedPermissions.size() > 0) { //没有授权过,去申请一下 requestPermissions(deniedPermissions.toArray(new String[deniedPermissions.size()]), requestCode); } else { //都已经授权过了 if (mOnPermissionListener != null) { mOnPermissionListener.onPermissionGranted(); } if (!isFinishing()) { finish(); } } } /** * 请求权限结果 */ public void requestPermissionsResult(int requestCode, int[] grantResults) { if (requestCode != -1 && requestCode == requestCode) { if (verifyPermissions(grantResults)) { //都授权了 if (mOnPermissionListener != null) { mOnPermissionListener.onPermissionGranted(); } finish(); } else { //有一个未授权或者多个未授权 if (mOnPermissionListener != null) { mOnPermissionListener.onPermissionDenied(); } finish(); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //申请权限结果返回 requestPermissionsResult(requestCode, grantResults); } /** * 获取请求权限中需要授权的权限,有的可能已经授权过了 */ private List<String> getDeniedPermissions(String[] permissions) { List<String> deniedPermissions = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_DENIED) { deniedPermissions.add(permission); } } return deniedPermissions; } /** * 验证所有权限是否都已经授权 */ private static boolean verifyPermissions(int[] grantResults) { for (int grantResult : grantResults) { if (grantResult != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } @Override protected void onDestroy() { super.onDestroy(); mOnPermissionListener = null; } /** * 启动activity,并带些必要参数过来 * * @param context * @param permissions 申请权限列表 * @param listener 结果回调 */ public static void start(Context context, String[] permissions, AppPermissionUtil.OnPermissionListener listener) { Intent intent = new Intent(context, RequestPermissionsHelpActivity.class); intent.putExtra("permissions", permissions); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); transferOnPermissionListener = listener; } }