android - 如何检查 ViewModel 中授予的权限?

标签 android android-activity permissions android-mvvm

我需要为联系人请求权限,当应用程序启动时,我会询问,在 ViewModel 部分,我需要调用需要权限的方法。我需要检查用户是否授予权限然后调用,但是为了检查权限我需要访问 Activity。而在我的 ViewModel 中,我没有对 Activity 的引用,也不想遇到这个问题,我该如何克服?

最佳答案

我刚遇到这个问题,我决定改用 LiveData

核心概念:

  • ViewModel 有一个关于需要做出什么权限请求的 LiveData

  • ViewModel 有一个方法(本质上是回调),如果权限被授予则返回

SomeViewModel.kt:

class SomeViewModel : ViewModel() {
    val permissionRequest = MutableLiveData<String>()

    fun onPermissionResult(permission: String, granted: Boolean) {
        TODO("whatever you need to do")
    }
}

FragmentOrActivity.kt

class FragmentOrActivity : FragmentOrActivity() {
    private viewModel: SomeViewModel by lazy {
        ViewModelProviders.of(this).get(SomeViewModel::class.java)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        ......
        viewModel.permissionRequest.observe(this, Observer { permission -> 
            TODO("ask for permission, and then call viewModel.onPermissionResult aftwewards")
        })
        ......
    }
}

关于android - 如何检查 ViewModel 中授予的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550851/

相关文章:

java - 如何在 Activity 开始时在进度条上显示进度

java - java中的树状数据结构

batch-file - 如何使用批处理文件以管理员权限结束进程

java - 如何在android上的按钮上画一条线?

java - 为什么 LiveData setValue 或 PostValue 在 View 中只触发一次 onChange?

android - EditText 中的永久提示

java - 主要 Activity 未设置主题

php - 管理角色并为角色分配权限 - Symfony

linux - 在本地机器上为 GIT 设置用户权限

android - 通过命令行将 Unity3D 项目导出为 Android 项目