栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

隐私合规 权限解耦

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

隐私合规 权限解耦

        前段时间各大平台app市场纷纷加大app审核力度,android生态环境日趋健康,在日常的客户端开发当中,我们就需要时刻持有隐私安全的意识,让自己站在用户的角度上合理的保证隐私安全。

本文只探讨 动态权限授予实现解耦

调用流程

private fun userRequestPermissions() {
        val permissionCameralinkedViewModel =
                PermissionCameralinkedViewModel()
        val permissionRecordlinkedViewModel =
                PermissionRecordlinkedViewModel()
        val loginViewModel = LoginViewModel()

        loginViewModel.loginSuccess.observe(this, Observer {
            if (it) {
                Toast.makeText(baseContext, "登录成功", Toast.LENGTH_SHORT).show()
            }

        })
        viewModel.requestPermissions(permissionCameralinkedViewModel, permissionRecordlinkedViewModel, loginViewModel, activity = this)

    }

业务链式分发 通过activity 注入 fragment PermissionProxy 转发权限请求并处理结果 ,通过livedata 更新视图

 fun requestPermissions(vararg permissions: baselinkedViewModel, activity: FragmentActivity) {
        //link

        for ((index, value) in permissions.withIndex()) {
            if (index != permissions.size - 1) {
                value.next = permissions[index + 1]
            }
        }
        permissions[0].next()
    }

调用权限请求 

 fun requestPermission(permission: String) {
        val granted = isGranted(permission)
        if (granted) {
            val permissionCallback: PermissionCallback? =
                    permissionCallbacks.get(permission);
            permissionCallbacks.remove(permission)
            permissionCallback?.onNext(permission, true, false)
        } else {
            //是否已拒绝过 已拒绝禁止再次弹出请求权限
            val refused = shouldShowRequestPermissionRationale(permission)
            val permissionCallback: PermissionCallback? =
                    permissionCallbacks.get(permission);
//            permissionCallbacks.remove(permission)
            permissionCallback?.onNext(permission, false, refused)
            showGlobalDialog(refused, permission)
        }

    }
abstract class baselinkedViewModel : baseViewModel() {
   lateinit var next:baselinkedViewModel;
   abstract  fun next()
}

//model分离

class PermissionCameralinkedViewModel : baseRequestPermissionlinkedViewModel() {

    override fun bindPermissions(): String = Manifest.permission.CAMERA


}

class PermissionRecordlinkedViewModel : baseRequestPermissionlinkedViewModel() {
    override fun bindPermissions(): String = Manifest.permission.RECORD_AUDIO


}
open class LoginViewModel : baselinkedViewModel() {
     val loginSuccess = MutableLiveData()
    override fun next() {
        loginSuccess.value = true
    }
}

代码实现 https://github.com/QtyearLin/permission 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769545.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号