【发布时间】: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(...))。