Android 6.0权限封装整合

来源:互联网 发布:面纱雾化器数据 编辑:程序博客网 时间:2024/05/22 02:03
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需要的点击查看使用方法不再赘述!

0 0