import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import java.util.HashMap;
/**
* Created by YuX on 2018/7/9 13:24
* ^_^ qq:565749553
*/
public class BegPermissionsUtils {
private AppCompatActivity activity;
private TodoBackFromBeg backDo;
public BegPermissionsUtils(AppCompatActivity activity, TodoBackFromBeg backDo) {
this.activity = activity;
this.backDo = backDo;
}
public static final String[] begRWPermissons = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
public static final String[] begCAMERA = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
public static final String[] begLOCATION = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
public static final String[] begQRCODE = {Manifest.permission.CAMERA};
public static final int BEGRWCODE = 1;
public static final int BEGAMERA = 2;
public static final int BEGCAMERA2 = 3;
public static final int BEGLOCATIONCODE = 4;
public static final int BEGQRCODE = 5;
/**
* 這個方法用於動態申請權限
*
* @param begPermissions 需要檢測的一些權限
*/
public boolean checkPermissions(String[] begPermissions, int requestCode) {
boolean result = true;
if (Build.VERSION.SDK_INT >= 23) {
for (int i = 0; i < begPermissions.length; i++) {
int checkedPermissionResult = activity.checkSelfPermission(begPermissions[i]);
if (checkedPermissionResult != PackageManager.PERMISSION_GRANTED) {
goBegPermission(begPermissions, requestCode);
result = false;
return result;
}
}
}
return result;
}
/**
* 彈出請求權限對話框
*/
private void goBegPermission(String[] begPermissions, int requestCode) {
if (Build.VERSION.SDK_INT >= 23) {
activity.requestPermissions(begPermissions, requestCode);
}
}
/**
* 去設置
*/
private void gotoSetting() {
Intent intent = new Intent();
Uri packageURI = Uri.parse("package:" + activity.getPackageName());
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(packageURI);
activity.startActivity(intent);
}
/**
* 彈出去設置界面對話框
*/
private synchronized void showGotoSetting(int requestCode) {
final int code = requestCode;
HashMap<String, DialogInterface.OnClickListener> clickOptionMap = new HashMap<String, DialogInterface.OnClickListener>();
clickOptionMap.put("去設置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
gotoSetting();
backDo.settingBack(code);
isshow=false;
}
});
clickOptionMap.put("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
backDo.cancelTodo(code);
isshow=false;
}
});
showButtonDialog("未開啓用戶權限,去設置", "開啓用戶權限",
clickOptionMap);
}
private synchronized void showButtonDialog(String message,
String title, HashMap<String, DialogInterface.OnClickListener> map) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(message);
builder.setTitle(title);
boolean bool = true;
boolean bool2 = true;
for (String key : map.keySet()) {
if (bool) {
builder.setPositiveButton(key, map.get(key));
bool = false;
} else if (bool2) {
builder.setNegativeButton(key, map.get(key));
bool2 = false;
} else {
builder.setNeutralButton(key, map.get(key));
}
}
builder.setCancelable(false);
builder.create().show();
}
public static boolean isshow;
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
for (int i = 0; i < permissions.length; i++) {
if (Build.VERSION.SDK_INT >= 23) {
int checkedPermissionResult = activity.checkSelfPermission(permissions[i]);
if (checkedPermissionResult != PackageManager.PERMISSION_GRANTED) {
if (!activity.shouldShowRequestPermissionRationale(permissions[i])) {
if(!isshow) {
isshow = true;
showGotoSetting(requestCode);
}
return;
}
backDo.cancelTodo(requestCode);
return;
}
}
}
backDo.backTodo(requestCode);
}
public interface TodoBackFromBeg {
void backTodo(int requestCode);
void cancelTodo(int requestCode);
void settingBack(int requsetCode);
}
}
6.0以上權限封裝再版,另修復了重複彈出去設置對話框的bug
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.