diff --git a/app/build.gradle b/app/build.gradle index b5afaef..487dfd4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,6 @@ dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' -// implementation project(path: ':permission') - implementation 'com.github.jjjSilence:PermissionUtils:1.0.0' + implementation project(path: ':permission') +// implementation 'com.github.jjjSilence:PermissionUtils:1.0.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed58884..39010f5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ package="com.jjj.permissionutils"> + - - \ No newline at end of file + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 47619cd..67cfac9 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,9 @@ buildscript { google() jcenter() maven { url 'https://jitpack.io' } + maven { url "https://maven.aliyun.com/repository/public/" } + maven { url "https://maven.aliyun.com/repository/google/" } + maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" } } dependencies { classpath 'com.android.tools.build:gradle:3.5.3' @@ -18,6 +21,9 @@ allprojects { google() jcenter() maven { url 'https://jitpack.io' } + maven { url "https://maven.aliyun.com/repository/public/" } + maven { url "https://maven.aliyun.com/repository/google/" } + maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" } } } diff --git a/permission/src/main/java/com/jjj/permission/PermissionCallback.java b/permission/src/main/java/com/jjj/permission/BasePermissionCallback.java similarity index 58% rename from permission/src/main/java/com/jjj/permission/PermissionCallback.java rename to permission/src/main/java/com/jjj/permission/BasePermissionCallback.java index bef9e56..47b9530 100644 --- a/permission/src/main/java/com/jjj/permission/PermissionCallback.java +++ b/permission/src/main/java/com/jjj/permission/BasePermissionCallback.java @@ -6,7 +6,7 @@ * @author jiangjiaojiao * @since 2020-04-13 */ -public interface PermissionCallback { +public interface BasePermissionCallback { /** * Granted permissions */ @@ -14,8 +14,15 @@ public interface PermissionCallback { /** * Denied permissions - * + */ + void deniedPermissions(); + + /** * @return Is use default tips dialog if lacking permissions */ - boolean deniedPermissions(); + boolean isUseDefaultTipsDialog(); + + void showCustomTipsDialog(); + + void hideCustomTipsDialog(); } diff --git a/permission/src/main/java/com/jjj/permission/DefaultPermissionCallback.java b/permission/src/main/java/com/jjj/permission/DefaultPermissionCallback.java new file mode 100644 index 0000000..8da8609 --- /dev/null +++ b/permission/src/main/java/com/jjj/permission/DefaultPermissionCallback.java @@ -0,0 +1,27 @@ +package com.jjj.permission; + +/** + * xx + * + * @author jiangjiaojiao + * @since 2020-07-20 + */ +public abstract class DefaultPermissionCallback implements BasePermissionCallback { + @Override + public void deniedPermissions() { + } + + @Override + public boolean isUseDefaultTipsDialog() { + return true; + } + + @Override + public void showCustomTipsDialog() { + } + + @Override + public void hideCustomTipsDialog() { + + } +} diff --git a/permission/src/main/java/com/jjj/permission/PermissionManager.java b/permission/src/main/java/com/jjj/permission/PermissionManager.java new file mode 100644 index 0000000..a84f42a --- /dev/null +++ b/permission/src/main/java/com/jjj/permission/PermissionManager.java @@ -0,0 +1,107 @@ +package com.jjj.permission; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.graphics.Color; +import android.support.annotation.NonNull; + +/** + * xx + * + * @author jiangjiaojiao + * @since 2020-07-20 + */ +public class PermissionManager { + private Activity mActivity; + private String[] mNeedPermissions; + private BasePermissionCallback mPermissionCallback; + private boolean isFirstRequestPermission = true; + private AlertDialog mDefaultTipsDialog; + + public PermissionManager(Activity activity, String[] needPermissions, @NonNull BasePermissionCallback callback) { + mActivity = activity; + mNeedPermissions = needPermissions; + mPermissionCallback = callback; + } + + public void onResume() { + if (PermissionUtils.checkPermissions(mActivity, mNeedPermissions)) { + mPermissionCallback.grantedPermissions(); + hideTipsDialog(); + } else { + mPermissionCallback.deniedPermissions(); + if (isFirstRequestPermission) { + PermissionUtils.requestPermissions(mActivity, mNeedPermissions); + isFirstRequestPermission = false; + } else { + showTipsDialog(); + } + } + } + + public void onRequestPermissionsResult(int requestCode) { + if (requestCode == PermissionUtils.ACTION_REQUEST_PERMISSIONS && + !PermissionUtils.checkPermissions(mActivity, mNeedPermissions)) { + showTipsDialog(); + } + } + + private void showDefaultTipsDialog() { + if (mDefaultTipsDialog == null) { + createDefaultTipsDialog(); + } + if (!mDefaultTipsDialog.isShowing()) { + mDefaultTipsDialog.show(); + mDefaultTipsDialog.getButton(DialogInterface.BUTTON_NEGATIVE) + .setTextColor(Color.parseColor("#888888")); + } + } + + private void hideDefaultTipsDialog() { + if (mDefaultTipsDialog != null && mDefaultTipsDialog.isShowing()) { + mDefaultTipsDialog.dismiss(); + } + } + + private void showTipsDialog() { + if (mPermissionCallback.isUseDefaultTipsDialog()) { + showDefaultTipsDialog(); + } else { + mPermissionCallback.showCustomTipsDialog(); + } + } + + private void hideTipsDialog() { + if (mPermissionCallback.isUseDefaultTipsDialog()) { + hideDefaultTipsDialog(); + } else { + mPermissionCallback.hideCustomTipsDialog(); + } + } + + private void createDefaultTipsDialog() { + mDefaultTipsDialog = new AlertDialog.Builder(mActivity) + .setTitle("授权提醒") + .setMessage("权限不足会影响正常使用,请立即授权") + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + mActivity.finish(); + } + }) + .setPositiveButton("立即授权", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (PermissionUtils.isSuccessRequestPermissions(mActivity, mNeedPermissions)) { + PermissionUtils.requestPermissions(mActivity, mNeedPermissions); + } else { + PermissionUtils.goSettingPage(mActivity); + } + } + }) + .setCancelable(false) + .create(); + } +} diff --git a/permission/src/main/java/com/jjj/permission/PermissionUtils.java b/permission/src/main/java/com/jjj/permission/PermissionUtils.java index d1df9fa..7145121 100644 --- a/permission/src/main/java/com/jjj/permission/PermissionUtils.java +++ b/permission/src/main/java/com/jjj/permission/PermissionUtils.java @@ -1,70 +1,83 @@ package com.jjj.permission; import android.app.Activity; -import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; +import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Color; +import android.net.Uri; +import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; - /** - * 权限请求封装类 + * xx * * @author jiangjiaojiao - * @since 2020-01-17 + * @since 2020-07-20 */ public class PermissionUtils { - private static final int ACTION_REQUEST_PERMISSIONS = 0x001; - - public static void requestPermissions(Activity activity, String[] neededPermissions) { - ActivityCompat.requestPermissions(activity, neededPermissions, ACTION_REQUEST_PERMISSIONS); - } + protected static final int ACTION_REQUEST_PERMISSIONS = 0x001; - public static boolean checkPermissions(Context context, String[] neededPermissions) { + /** + * 检查是否获取权限 + * + * @param context + * @param neededPermissions + * @return false: 缺少权限 + */ + public static boolean checkPermissions(Activity context, String[] neededPermissions) { boolean allGranted = true; for (String neededPermission : neededPermissions) { - allGranted = allGranted && ( - ContextCompat.checkSelfPermission(context, neededPermission) == + allGranted = allGranted && + (ContextCompat.checkSelfPermission(context, neededPermission) == PackageManager.PERMISSION_GRANTED); } return allGranted; } - public static void onRequestPermissionsResult(final Activity activity, int requestCode, - final String[] neededPermissions, PermissionCallback callback) { - if (requestCode == ACTION_REQUEST_PERMISSIONS) { - if (checkPermissions(activity, neededPermissions)) { - if (callback != null) { - callback.grantedPermissions(); - } - return; - } + public static boolean checkPermissions(Context context, String permission) { + return ContextCompat.checkSelfPermission(context, permission) == + PackageManager.PERMISSION_GRANTED; + } - if (callback != null) { - if (!callback.deniedPermissions()) { - return; + /** + * 是否存在 【权限被拒,不再提醒】的权限 + * + * @param activity + * @param neededPermissions + * @return + */ + public static boolean isSuccessRequestPermissions(Activity activity, String[] neededPermissions) { + for (String neededPermission : neededPermissions) { + if (ContextCompat.checkSelfPermission(activity, neededPermission) != + PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.shouldShowRequestPermissionRationale(activity, neededPermission)) { + return true; } } - - AlertDialog alertDialog = new AlertDialog.Builder(activity) - .setTitle("提醒") - .setMessage("权限不足会影响当前使用,请重新授权") - .setNegativeButton("退出", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - activity.finish(); - } - }).setPositiveButton("重新授权", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - requestPermissions(activity, neededPermissions); - } - }).show(); - alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE) - .setTextColor(Color.parseColor("#888888")); } + return false; + } + + /** + * 请求权限 + * + * @param activity + * @param neededPermissions + */ + public static void requestPermissions(Activity activity, String[] neededPermissions) { + ActivityCompat.requestPermissions(activity, neededPermissions, ACTION_REQUEST_PERMISSIONS); + } + + /** + * 【权限被拒,不再提醒】需要去设置-权限管理中重新授权 + * + * @param context + */ + public static void goSettingPage(Context context) { + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + Uri uri = Uri.fromParts("package", context.getApplicationContext().getPackageName(), null); + intent.setData(uri); + context.startActivity(intent); } }