【问题标题】:How to request permission using ViewModel如何使用 ViewModel 请求权限
【发布时间】:2020-10-22 13:24:05
【问题描述】:

我需要使用 ZxingZxing Android Embedded 作为 Activity 来实现 QR 扫描仪,我想使用 ViewModel,但我不知道请求或检查是否给予许可的方式。当我使用 MVP 进行操作时,流程如下:

Activity > presenter.onViewReady(this) > view.requestPremission() > onActivityResult 正在检查权限,如果正常则 > presenter.doStuff()

但是如何使用 ViewModel 来实现呢?

【问题讨论】:

  • 视图模型不应该关心 UI 的东西,并且请求权限是 UI 相关的,所以真的应该没有区别。一旦您在活动中请求权限(或授予检查权限),然后调用视图模型
  • 所以,这就是 MVP 和 MVVM 在 View - Presenter 和 View - ViewModel 方面不同的原因,对吧?那么我必须向 Activity 请求权限,一旦他们接受了,我就必须调用 viewModel 吗?
  • 是的,它应该是这样工作的

标签: android viewmodel android-permissions zxing


【解决方案1】:

到目前为止,在 Android 中,您只能从 Activity 获得许可。为了直接从ViewModel检查和请求权限,我建议引入以下两个实体:

  • PermissionManager -- 是用于管理权限的高级接口。建议您在ViewModel 级别使用此接口的实现。

    interface PermissionManager {
        boolean checkPermissionGranted(String permission);
    
         // Returns false if user have previously checked "Don't ask again"
         // option for your permission
        boolean requestPermission(String permission);
    }
    
  • PermissionProvider -- 实际允许PermissionManager 向系统请求特定权限。

    interface PermissionProvider {
         interface Callback{
            void onPermissionGranted(String permission);
         }
         boolean requestPermission(String permission);
    }
    

    正如我所提到的,您只能向Activity 请求权限,因此您的Activity 为您的应用提供权限,并且应该:

    1. 实现PermissionProvider 接口和您在view.requestPremission() 中已有的逻辑;
    2. 将自身 (PermissionProvider) 附加到 onStart() 中的 PermissionManager 并在 onStop() 中分离自身。

这种方法的好处是您可以在真正需要时检查并询问权限。如果Android SDK 不仅可以从Activity 请求权限,您还可以实现各种PermissionProviders。

【讨论】:

  • 好的,我试试,谢谢,你能用viewmodel举一个简单的例子吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 2017-07-03
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多