android 6.0 权限动态获取示例

来源:互联网 发布:猴赛雷微信软件 编辑:程序博客网 时间:2024/06/05 20:12

话不多话,直接上代码好啦。

-

-

-

根据所需要申请的权限加以判断。获取需要申请权限的集合并申请权限:


private List<String> findDeniedPermissions(String[] permissions) {    List<String> needRequestPermissonList = new ArrayList<String>();    for (String perm : permissions) {        if (ContextCompat.checkSelfPermission(this,                perm) != PackageManager.PERMISSION_GRANTED                || ActivityCompat.shouldShowRequestPermissionRationale(                this, perm)) {            needRequestPermissonList.add(perm);        }    }    return needRequestPermissonList;}

-

-

private void checkPermissions(String... permissions) {    List<String> needRequestPermissonList = findDeniedPermissions(permissions);    if (null != needRequestPermissonList            && needRequestPermissonList.size() > 0) {        ActivityCompat.requestPermissions(this,                needRequestPermissonList.toArray(                        new String[needRequestPermissonList.size()]),                PERMISSON_REQUESTCODE);    }}
-

-

权限回调中进行处理:


@Overridepublic void onRequestPermissionsResult(int requestCode,                                       String[] permissions, int[] paramArrayOfInt) {    if (requestCode == PERMISSON_REQUESTCODE) {        if (!verifyPermissions(paramArrayOfInt)) {            showMissingPermissionDialog();            isNeedCheck = false;        }    }}
-

主要逻辑简单明了,下面附上全部代码(此处以位置信息权限组示例):


public class CheckPermissionsActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback{    /**     * 需要进行检测的权限数组     */    protected String[] needPermissions = {            Manifest.permission.ACCESS_COARSE_LOCATION,            Manifest.permission.ACCESS_FINE_LOCATION,            Manifest.permission.WRITE_EXTERNAL_STORAGE,            Manifest.permission.READ_EXTERNAL_STORAGE,            Manifest.permission.READ_PHONE_STATE    };    private static final int PERMISSON_REQUESTCODE = 0;    /**     * 判断是否需要检测,防止不停的弹框     */    private boolean isNeedCheck = true;    private long mExitTime;    @Override    protected void onResume() {        super.onResume();        if(Build.VERSION.SDK_INT >= 23) {            if (isNeedCheck) {                checkPermissions(needPermissions);            }        }    }    /**     * @since 2.5.0     */    private void checkPermissions(String... permissions) {        List<String> needRequestPermissonList = findDeniedPermissions(permissions);        if (null != needRequestPermissonList                && needRequestPermissonList.size() > 0) {            ActivityCompat.requestPermissions(this,                    needRequestPermissonList.toArray(                            new String[needRequestPermissonList.size()]),                    PERMISSON_REQUESTCODE);        }    }    /**     * 获取权限集中需要申请权限的列表     *     * @param permissions     * @return     * @since 2.5.0     */    private List<String> findDeniedPermissions(String[] permissions) {        List<String> needRequestPermissonList = new ArrayList<String>();        for (String perm : permissions) {            if (ContextCompat.checkSelfPermission(this,                    perm) != PackageManager.PERMISSION_GRANTED                    || ActivityCompat.shouldShowRequestPermissionRationale(                    this, perm)) {                needRequestPermissonList.add(perm);            }        }        return needRequestPermissonList;    }    /**     * 检测是否说有的权限都已经授权     *     * @param grantResults     * @return     * @since 2.5.0     */    private boolean verifyPermissions(int[] grantResults) {        for (int result : grantResults) {            if (result != PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    @Override    public void onRequestPermissionsResult(int requestCode,                                           String[] permissions, int[] paramArrayOfInt) {        if (requestCode == PERMISSON_REQUESTCODE) {            if (!verifyPermissions(paramArrayOfInt)) {                showMissingPermissionDialog();                isNeedCheck = false;            }        }    }    /**     * 显示提示信息     *     * @since 2.5.0     */    private void showMissingPermissionDialog() {        AlertDialog.Builder builder = new AlertDialog.Builder(this);        builder.setTitle("提示");        builder.setMessage("当前应用缺少必要权限。\n请点击\n设置-\n权限-\n打开所需权限");        // 拒绝, 退出应用        builder.setNegativeButton("取消",                new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        finish();                    }                });        builder.setPositiveButton("设置",                new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        startAppSettings();                    }                });        builder.setCancelable(false);        builder.show();    }    /**     * 启动应用的设置     *     * @since 2.5.0     */    private void startAppSettings() {        Intent intent = new Intent(                Settings.ACTION_APPLICATION_DETAILS_SETTINGS);        intent.setData(Uri.parse("package:" + getPackageName()));        startActivity(intent);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            exit();            return true;        }        return super.onKeyDown(keyCode, event);    }    public void exit() {        if ((System.currentTimeMillis() - mExitTime) > 2000) {            Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();            mExitTime = System.currentTimeMillis();        } else {            finish();            System.exit(0);        }    }}

-> -> ->

6.0权限的适配 主要逻辑已经贴出来了。还没做过权限适配的小伙伴们 抓紧搞起来吧!!

我一直相信一位名人说过的话:

 有价值的事物,

应该受到相应的支持,

这样好的东西才能受到鼓励,发扬光大,不好的东西才可能被人忘记。

转载请注明地址!(*^__^*) http://blog.csdn.net/qq_34062297/article/details/77651375


原创粉丝点击