package com.example.VerticalMarqueeTextView.util;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
/**
* 權限封裝類
* Created by John on 2017/2/11.
*/
public class XPermissionUtils {
private static int mRequestCode=-1;
public static OnPermissionListener onPermissionListener;
public interface OnPermissionListener{
//權限授予
void onPermissionGranted();
//權限拒絕
void onPermissionDenied();
}
@TargetApi(Build.VERSION_CODES.M)
public static void requestPermissions(Context context, int requestCode, String[] permissions, OnPermissionListener onPermissionListener){
if(context instanceof Activity){
onPermissionListener=onPermissionListener;
List<String> deniedPermissions=getDeniedPermissions(context,permissions);
}
}
/**
* 获取请求权限中需要授权的权限
*/
private static List<String> getDeniedPermissions(Context context, String[] permissions) {
List<String> deniedPermissions = new ArrayList<>();
for(String permission:permissions){
if(ContextCompat.checkSelfPermission(context,permission)== PackageManager.PERMISSION_DENIED){
deniedPermissions.add(permission);
}
}
return deniedPermissions;
}
/**
* 请求权限结果,对应Activity中onRequestPermissionsResult()方法。
*/
public static void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if(mRequestCode!=-1&&requestCode==mRequestCode){
if(onPermissionListener!=null){
if(verifyPermissions(grantResults)){
onPermissionListener.onPermissionGranted();
}else{
onPermissionListener.onPermissionDenied();
}
}
}
}
/**
* 驗證所有權限是否都已經授予
* @param grantResults
* @return
*/
private static boolean verifyPermissions(int[] grantResults) {
for (int grantResult:grantResults
) {
if(grantResult!=PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
}
拨打电话权限
以拨打电话为例,首先在Manifest文件中定义好拨打电话权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
第一步(当用户点击拨打电话按钮时执行如下代码):
MPermissionUtils.requestPermissionsResult(this, 1, new String[]{Manifest.permission.CALL_PHONE}
, new MPermissionUtils.OnPermissionListener() {
@Override
public void onPermissionGranted() {
Toast.makeText(MainActivity.this, "授权成功,执行拨打电话操作!", Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionDenied() {
MPermissionUtils.showTipsDialog(MainActivity.this);
}
});
第二步(重写onRequestPermissionsResult()方法,使用MPermissionUtils类中的方法进行接管):
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
MPermissionUtils.onRequestPermissionsResult(requestCode, permissions, grantResults);
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
另外韩国人也封装了权限框架PermissionGen需要的点击查看使用方法不再赘述!