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);
}
}