如何在 ViewModel 中获取位置权限

How can I get Location Permission in ViewModel

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

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

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

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

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

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

在视图模型中请求权限并在 ViewModel 中使用 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;
    }
}

我会尝试使 ViewModel 尽可能独立于平台,尤其是 Context 免费。

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