AndroidAPP隐私权限整改

AndroidAPP隐私权限整改,第1张

概述一、背景简介前段时间,国内对于安卓APP隐私问题做了一波整改,我们的APP也做了一些整改,现在分块抽空整理出来吧二、整改项目1、隐私权限整改主要是针对现在市场上APP各种乱申请权限,获取用户隐私的行为,整理了一个工具类(主要参考云闪付APP的业务逻辑),如下:publicclassPermissio 一、背景简介

前段时间,国内对于安卓APP隐私问题做了一波整改,我们的APP也做了一些整改,现在分块抽空整理出来吧

二、整改项目

1、隐私权限整改

主要是针对现在市场上APP各种乱申请权限,获取用户隐私的行为,整理了一个工具类(主要参考云闪付APP的业务逻辑),如下:

public class PermissionUtils {        /    /**     * 当前APP需要动态获取的运行时权限     */    private static String[] partnerAppPermissions = {            Manifest.permission.CAMERA,            Manifest.permission.WRITE_EXTERNAL_STORAGE,//            Manifest.permission.READ_EXTERNAL_STORAGE,            Manifest.permission.ACCESS_FINE_LOCATION,//            Manifest.permission.ACCESS_COARSE_LOCATION    };    private static Map<String, String> getPermissionnameMap() {        Map<String, String> permissionnameMap = new HashMap<>();        permissionnameMap.put(Manifest.permission.CAMERA, "相机");        permissionnameMap.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, "存储");//        permissionnameMap.put(Manifest.permission.READ_EXTERNAL_STORAGE, "存储");        permissionnameMap.put(Manifest.permission.ACCESS_FINE_LOCATION, "定位");//        permissionnameMap.put(Manifest.permission.ACCESS_COARSE_LOCATION, "定位");        return permissionnameMap;    }    private static Map<String, String> getPermissionDesMap() {        Map<String, String> getPermissionDesMap = new HashMap<>();        getPermissionDesMap.put(Manifest.permission.CAMERA, "照相设备将被用于****等需要使用相机的功能");        getPermissionDesMap.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, "手机存储权限将被用于读写文件系统业务,如图片缓存、主要功能的访问与使用");//        getPermissionDesMap.put(Manifest.permission.READ_EXTERNAL_STORAGE, "手机存储权限将被用于读写文件系统业务,如图片缓存、主要功能的访问与使用");        getPermissionDesMap.put(Manifest.permission.ACCESS_FINE_LOCATION, "APP需要获取您的位置信息,用于****等需要位置信息的功能");//        getPermissionDesMap.put(Manifest.permission.ACCESS_COARSE_LOCATION, "APP需要获取您的位置信息,用于*****等需要位置信息的功能");        return getPermissionDesMap;    }    /**     * 获取运行时权限列表描述及相关授权情况     */    public static List<PermissionBean> getPermissionBeanList(BaseActivity baseActivity) {        return getPermissionBeanList(baseActivity, partnerAppPermissions);    }    private static List<PermissionBean> getPermissionBeanList(BaseActivity baseActivity, String[] permissions) {        if (permissions == null || permissions.length == 0) {            return null;        }        List<PermissionBean> permissionBeanList = new ArrayList<>();        PermissionBean permissionBean = null;        Map<String, String> permissionnameMap = getPermissionnameMap();        Map<String, String> getPermissionDesMap = getPermissionDesMap();        for (String permission : permissions) {            permissionBean = new PermissionBean();            permissionBean.setPermission(permission);            permissionBean.setPermissionname(permissionnameMap.get(permission));            permissionBean.setPermissionDes(getPermissionDesMap.get(permission));            permissionBean.setGranted(checkPermissionBefore(baseActivity, permission));            permissionBeanList.add(permissionBean);            permissionBean = null;        }        return permissionBeanList;    }    /**     * 获取相机权限     * 请勿放在Activity的onResume()中,避免反复d窗     *     * @param baseActivity 上下文环境     * @param Listener     权限获取结果监听     */    public static voID getCameraPermission(BaseActivity baseActivity, PermissionListener Listener) {        int[] applyMsg = new int[]{R.string.camera_permission, R.string.camera_permission_message, R.string.camera_permission_apply};        String[] permissions = new String[]{Manifest.permission.CAMERA};        getNeedPermission(baseActivity, Listener, applyMsg, permissions);    }    /**     * 获取外部存储权限     * 请勿放在Activity的onResume()中,避免反复d窗     *     * @param baseActivity 上下文环境     * @param Listener     权限获取结果监听     */    public static voID getStoragePermission(BaseActivity baseActivity, PermissionListener Listener) {        int[] applyMsg = new int[]{R.string.external_storage_permission, R.string.external_storage_permission_message, R.string.external_storage_permission_apply};        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};        getNeedPermission(baseActivity, Listener, applyMsg, permissions);    }    /**     * 获取定位权限     * 请勿放在Activity的onResume()中,避免反复d窗     *     * @param baseActivity 上下文环境     * @param Listener     权限获取结果监听     */    public static voID getLocationPermission(BaseActivity baseActivity, PermissionListener Listener) {        int[] applyMsg = new int[]{R.string.location_permission, R.string.location_permission_message, R.string.location_permission_apply};        String[] permissions = new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};        getNeedPermission(baseActivity, Listener, applyMsg, permissions);    }    /**     * 需要动态获取的权限申请     * 请勿放在Activity的onResume()中,避免反复d窗     *     * @param baseActivity 上下文环境     * @param Listener     权限获取结果监听     * @param applyMsg     依次为:权限,申请原因说明,申请描述     * @param permissions  危险权限名称     */    private static voID getNeedPermission(BaseActivity baseActivity, PermissionListener Listener, int[] applyMsg, String... permissions) {        if (applyMsg == null || applyMsg.length != 3) {            return;        }        if (!checkPermissionBefore(baseActivity, permissions)) {            requestPermissionDialog(baseActivity, applyMsg[0], applyMsg[1], applyMsg[2], Listener, permissions);        } else {            Listener.allow();        }    }    /**     * 权限检查     */    private static boolean checkPermissionBefore(BaseActivity baseActivity, String... permissions) {        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {            return true;        }        for (String permission : permissions) {            if (ContextCompat.checkSelfPermission(baseActivity, permission) != PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    /**     * 请求权限前的d窗     *     * @param baseActivity    上下文环境     * @param Title           "APP"想访问您的*****     * @param message         *****权限权限将被用于………的访问与使用     * @param unauthorizedMsg 权限获取失败的d窗提示语     */    private static voID requestPermissionDialog(BaseActivity baseActivity, @StringRes int Title, @StringRes int message, @StringRes int unauthorizedMsg,                                                PermissionListener Listener, String... permissions) {        CustomDialog.Builder builder = new CustomDialog.Builder(baseActivity);        builder.setTitle(Title)                .setTitleVisible(true)                .setMessage(message)                .setPositivebutton("允许", (dialog, which) -> {                    dialog.dismiss();                    //请求权限                    requestPermission(baseActivity, unauthorizedMsg, Listener, permissions);                })                .setNegativebutton("不允许", (dialog, which) -> dialog.dismiss())                .setCancelable(false).create().show();    }    /**     * 权限获取结果监听     */    public interface PermissionListener {        voID allow();    }    /**     * 权限获取     */    private static voID requestPermission(BaseActivity baseActivity, @StringRes int unauthorizedMsg, PermissionListener Listener, String... permissions) {        RxPermissions rxPermissions = new RxPermissions(baseActivity);        disposable disposable = rxPermissions.request(permissions)                .subscribe(new Consumer<Boolean>() {                    @OverrIDe                    public voID accept(Boolean aBoolean) throws Exception {                        if (aBoolean) {                            //权限获取成功                            Listener.allow();                        } else {                            //权限获取失败,d出授权提示框                            unauthorizedPoint(baseActivity, unauthorizedMsg);                        }                    }                });    }    /**     * 未授权时,再次点击d出的授权提示框     *     * @param baseActivity 上下文环境     * @param message      因您未授予APP****权限,该功能无法使用,可在设置中修改     */    private static voID unauthorizedPoint(BaseActivity baseActivity, @StringRes int message) {        CustomDialog.Builder builder = new CustomDialog.Builder(baseActivity);        builder.setTitle(R.string.permission_apply)                .setTitleVisible(true)                .setMessage(message)                .setPositivebutton("去设置", (dialog, which) -> {                    dialog.dismiss();                    //跳转权限设置界面                    gotoSettings(baseActivity);                })                .setNegativebutton("取消", (dialog, which) -> dialog.dismiss())                .setCancelable(false).create().show();    }    /**     * 跳转权限设置界面     *     * @param baseActivity 上下文环境     */    public static voID gotoSettings(BaseActivity baseActivity) {        Intent intent = new Intent(Settings.ACTION_APPliCATION_DETAILS_SETTINGS);        intent.setData(Uri.parse("package:" + baseActivity.getPackagename()));        baseActivity.startActivity(intent);    }}

2、APP隐私政策

APP隐私政策内容要注意做好APP权限和隐私的说明首次使用APP需要d出隐私政策d窗登录APP需要同意隐私政策隐私政策有更新时需要再次d出隐私政策d窗

先简单写这些吧,后续有空再整理补充

 

总结

以上是内存溢出为你收集整理的Android APP隐私权限整改全部内容,希望文章能够帮你解决Android APP隐私权限整改所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1049455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存