Android Study 之聊聊权限那点事儿~别怕,就是干~!!!( 五 )


当前设备大于等于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请求的每个权限都被允许() 。内部已经对版本进行了判断: