Android动态申请权限工具类

来源:互联网 发布:淘宝快递打单怎么装 编辑:程序博客网 时间:2024/06/09 23:43
/** * Created by Administrator on 2017/5/23. * Android 6.0以上共有9组权限需要申请,组内一个权限申请成功代表其他也申请成功 */public class PermissionUtils {    private static final String TAG = PermissionUtils.class.getSimpleName();    public static final int CODE_RECORD_AUDIO = 0;    public static final int CODE_GET_ACCOUNTS = 1;    public static final int CODE_READ_PHONE_STATE = 2;    public static final int CODE_CALL_PHONE = 3;    public static final int CODE_CAMERA = 4;    public static final int CODE_ACCESS_FINE_LOCATION = 5;    public static final int CODE_ACCESS_COARSE_LOCATION = 6;    public static final int CODE_READ_EXTERNAL_STORAGE = 7;    public static final int CODE_WRITE_EXTERNAL_STORAGE = 8;    public static final int CODE_SEND_SMS = 9;    public static final int CODE_CHANGE_WIFI_STATE = 10;    public static final int CODE_CHANGE_NETWORK_STATE = 11;    public static final int CODE_ACCESS_WIFI_STATE = 12;    public static final int CODE_WRITE_SETTINGS = 13;    public static final int CODE_MULTI_PERMISSION = 100;    public static final String PERMISSION_RECORD_AUDIO = Manifest.permission.RECORD_AUDIO;    public static final String PERMISSION_GET_ACCOUNTS = Manifest.permission.GET_ACCOUNTS;    public static final String PERMISSION_READ_PHONE_STATE = Manifest.permission.READ_PHONE_STATE;    public static final String PERMISSION_CALL_PHONE = Manifest.permission.CALL_PHONE;    public static final String PERMISSION_CAMERA = Manifest.permission.CAMERA;    public static final String PERMISSION_ACCESS_FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;    public static final String PERMISSION_ACCESS_COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION;    public static final String PERMISSION_READ_EXTERNAL_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE;    public static final String PERMISSION_WRITE_EXTERNAL_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;    public static final String PERMISSION_SEND_SMS = Manifest.permission.SEND_SMS;    public static final String PERMISSION_CHANGE_WIFI_STATE = Manifest.permission.CHANGE_WIFI_STATE;    public static final String PERMISSION_CHANGE_NETWORK_STATE = Manifest.permission.CHANGE_NETWORK_STATE;    public static final String PERMISSION_ACCESS_WIFI_STATE = Manifest.permission.ACCESS_WIFI_STATE;    public static final String PERMISSION_WRITE_SETTINGS = Manifest.permission.WRITE_SETTINGS;    private static final String[] requestPermissions = {            PERMISSION_RECORD_AUDIO,            PERMISSION_GET_ACCOUNTS,            PERMISSION_READ_PHONE_STATE,            PERMISSION_CALL_PHONE,            PERMISSION_CAMERA,            PERMISSION_ACCESS_FINE_LOCATION,            PERMISSION_ACCESS_COARSE_LOCATION,            PERMISSION_READ_EXTERNAL_STORAGE,            PERMISSION_WRITE_EXTERNAL_STORAGE,            PERMISSION_SEND_SMS,            PERMISSION_CHANGE_WIFI_STATE,            PERMISSION_CHANGE_NETWORK_STATE,            PERMISSION_ACCESS_WIFI_STATE,            PERMISSION_WRITE_SETTINGS    };    /**     * Requests permission.     *     * @param activity     * @param requestCode request code, e.g. if you need request CAMERA permission,parameters is PermissionUtils.CODE_CAMERA     */    public static void requestPermission(final Activity activity, final int requestCode) {        if (activity == null) {            return;        }        Log.i(TAG, "requestPermission requestCode:" + requestCode);        if (requestCode < 0 || requestCode >= requestPermissions.length) {            Log.w(TAG, "requestPermission illegal requestCode:" + requestCode);            return;        }        final String requestPermission = requestPermissions[requestCode];        Log.i(TAG, "requestPermission :" + requestPermission);        //如果是6.0以下的手机,ActivityCompat.checkSelfPermission()会始终等于PERMISSION_GRANTED,        // 但是,如果用户关闭了你申请的权限,ActivityCompat.checkSelfPermission(),会导致程序崩溃(java.lang.RuntimeException: Unknown exception code: 1 msg null),        // 你可以使用try{}catch(){},处理异常,也可以在这个地方,低于23就什么都不做,        // 个人建议try{}catch(){}单独处理,提示用户开启权限。//        if (Build.VERSION.SDK_INT < 23) {//            return;//        }        if (Build.VERSION.SDK_INT >= 23) {            //检测当前app是否拥有某个权限            int checkCallPhonePermission = ContextCompat.checkSelfPermission(activity, requestPermission);            //判断这个权限是否已经授权过            System.out.println("checkCallPhonePermission  0代表已经获得权限:::"+checkCallPhonePermission);            if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){                //判断是否需要 向用户解释,为什么要申请该权限                if(ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission))                    Toast.makeText(activity,requestPermission,Toast.LENGTH_SHORT).show();                ActivityCompat.requestPermissions(activity,new String[]{requestPermission},requestCode);                return;            }else{            }        } else {        }    }}


在Activity中设置监听器

class AuthorityListener implements OnClickListener{        int i;        public AuthorityListener(int i){            this.i=i;        }        @Override        public void onClick(View v) {            PermissionUtils.requestPermission(MainActivity.this,i);        }    }

findViewById(R.id.button_1).setOnClickListener(new AuthorityListener(PermissionUtils.CODE_RECORD_AUDIO));//0


原创粉丝点击