当前设备大于等于6.0,我们直接读取用户拒绝的权限:
/*** 获取用户拒绝权限组** @param mObjectActivity Fragment* @param mRequestPermission* @return*/public static List getDeniedPermissions(Object object, String[] requestPermissions) {List deniedPermissions = new ArrayList<>();for (String requestPermission : requestPermissions) {// 将用户拒绝的权限添加集合if (ContextCompat.checkSelfPermission(getActivity(object), requestPermission) == PackageManager.PERMISSION_DENIED) {deniedPermissions.add(requestPermission);}}return deniedPermissions;}/*** 获取Context** @param mObject* @return*/public static Activity getActivity(Object mObject) {if (mObject instanceof Activity) {return (Activity) mObject;}if (mObject instanceof Fragment) {return ((Fragment) mObject).getActivity();}return null;}
下面,我们直接在权限回调中处理返回结果即可:
/*** 处理权限回调** @param requestCode申请权限Code码* @param permissions申请的权限数组* @param grantResults*/public static void requestPermissionsResult(Object object, int requestCode, String[] permissions) {// 再次获取用户拒绝的权限List deniedPermissions = PermissionUtils.getDeniedPermissions(object, permissions);if (deniedPermissions.size() == 0) {// 用户已授权申请的权限PermissionUtils.executeSucceedMethod(object, requestCode);} else {// 申请的权限中 有用户不同意的PermissionUtils.executeFailMethod(object, requestCode);}}
同样,我们也需要对外提供一个入口,方便他人直接调用:
/*** 请求权限** @param activity* @param requestCode* @param permissions*/public static void requestPermission(Activity activity, int requestCode, String[] permissions) {PermissionHelper.with(activity).requestCode(requestCode).requestPermission(permissions).request();}
到这里,关于 6.0运行时动态申请权限封装框架已完毕,那么我们该如何使用呢?看下面提供的一个小demo:
/*** 权限管理简单处理 create by heliquan at 2017年6月13日*/public class HongChengActivity2 extends Activity {private static final int CALL_PHONR_REQUEST_CODE = 0x0011;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hong_cheng1);findViewById(R.id.id_call).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {PermissionHelper.with(HongChengActivity2.this).requestCode(CALL_PHONR_REQUEST_CODE).requestPermission(Manifest.permission.CALL_PHONE).request();}});}/*** 拨打电话**/@PermissionSucceed(requestCode = CALL_PHONR_REQUEST_CODE)public void callPhone() {Intent intent = new Intent(Intent.ACTION_CALL);Uri data = http://www.kingceram.com/post/Uri.parse("tel:114");intent.setData(data);startActivity(intent);}@PermissionFail(requestCode = CALL_PHONR_REQUEST_CODE)private void callPhoneFail() {Toast.makeText(this, "您拒绝了拨打电话", Toast.LENGTH_SHORT).show();}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);Log.e("HLQ_Struggle", "=====================>CALL_PHONR_REQUEST_CODE:" + CALL_PHONR_REQUEST_CODE);Log.e("HLQ_Struggle", "=====================>请求码:" + requestCode);PermissionHelper.requestPermissionsResult(this, requestCode, permissions);}}
使用 老规矩 上运行结果
这里不得不吐槽小米,有时候拒绝权限,它自动设置为以后不再提醒,恶心要死~!!!
简介
是帮助开发者简化()相关的处理 。
(1) 开发者不用担心运行环境的版本,如果系统是 6.0之前的版本,返回的结果是,app请求的每个权限都被允许() 。内部已经对版本进行了判断:
- 山东冷知识:推荐山东这20个世界之最和中国之最,你还知道哪些? 中国之最在山东
- 一位教授的惊人调查:中国农村当前最严重问题,不是农民收入太低 当今中国之最
- 经典!广东话童谣儿歌,你会几首? 中国之最知识儿歌
- 中国超级工程,北盘江大桥耗资10亿有200层楼高,全球最高的大桥 中国之最高桥
- 中国国家地理评出国内10处最美的景点,看看你想去的排在第几 中国之最自然景物
- 第18次到访中国!盖茨在京演讲,他这样盛赞袁隆平屠呦呦 中国之最儿童演讲
- 创意无限快乐相伴|杭州道街道文安里社区开展亲子手工制作活动 中国之最亲子手工
- 电力之最①|温岭石塘:最阳光的渔民“好伙伴” 温岭的中国之最
- 中国高铁落后吗?台媒:为马英九秀速度,大陆刻意飚速350公里 中国之最及长度
- 第34集《成语串起中国史》之二十七上下其手古筝伴奏... 中国之最歌曲伴奏