【问题标题】:How can I get Location Permission in ViewModel如何在 ViewModel 中获得位置权限
【发布时间】:2021-09-17 10:52:40
【问题描述】:

我正在尝试使用 api 获取天气信息。

要使用天气 api,我需要位置信息。

所以我必须使用位置管理器。

但在这个项目中,我使用了 MVVM 设计模式。

所以我无法在 ViewModel 中获取位置管理器。 而且我无法在视图模型中请求权限。

如何在视图模型中获取位置管理器 以及如何在 ViewModel 中使用 onRequestPermissionsResult()?

在视图模型中请求权限并在视图模型中使用 onRequestPermissionsResult() 是正确的方法吗?

这是我的代码。

public class MAgencyViewModel extends ViewModel{

    private final String TAG = "MAgencyViewModel";

    //이 클래스에서는 Model과 통신하여서 날씨 정보를 받아온다.
    private MutableLiveData<ShortWeather> sw;
    private MAgencyRepo maRepo;

    private LocationManager lm;//핸드폰에 있는 gps관련 기기와 상호작용하기 위해서
    private GpsTransfer gpt;
    private GeoInfo gi;

    //여기서 이제 위치정보를 가지고 날씨정보 API를 호출하는 부분
    public void init(GeoInfo gi){
        if(sw != null){
            return;
        }

        //I want to get Location information in here

        maRepo = MAgencyRepo.getInStance();
        sw = maRepo.getWeather(gi); // this part is calling a weather api
        Log.i(TAG,"API Connection finish");
    }

    public LiveData<ShortWeather> getWeather(){
        return sw;
    }
}

【问题讨论】:

  • 你在问两个问题(过去stackoverflow.com/help/how-to-ask)。在 ViewModel 中搜索有关权限的 StackOverflow。关于 LocationManager,您有两个选择。要么使用应用程序上下文(静态或注入),要么在您的 Activity 收到位置更新时更新您的 ViewModel (viewMode.updateLocation(...))。

标签: android mvvm viewmodel


【解决方案1】:

我会尽量让 ViewModel 独立于平台,尤其是 Context 免费。

所以在这种情况下,我会在视图层(Activity、Fragment)上请求这个,因为获取LocationManager 可以通过getSystemService() 完成,这是Context 的一个函数。然后将onRequestPermissionsResult()等事件委托给ViewModel

【讨论】:

    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 2021-12-18
    • 2022-06-15
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2015-12-18
    • 2017-12-14
    相关资源
    最近更新 更多