我需要为联系人请求权限,当应用程序启动时,我会询问,在 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/