gpt4 book ai didi

android - fragment 内的 LocationManager

转载 作者:行者123 更新时间:2023-11-29 21:24:27 24 4
gpt4 key购买 nike

我正在尝试将使用 LocationListenerActivity 转换为 Fragment,使用 LocationManager 像这样:

protected LocationManager 位置管理器;

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
locationManager = (LocationManager) getActivity().getSystemService(
Context.LOCATION_SERVICE);
(...)
}

我在使用这些方法时遇到了一些问题(无法消除错误):

if (location != null) {
// location known:
onLocationChanged(location); // Error here
}


boolean startLocationUpdates() {
boolean result = false;
for (final String provider : locationManager.getProviders(true)) {
locationManager.requestLocationUpdates(provider, 2 * 1000, 0.0f,
this); // Error here
result = true;
}
return result;
}

@Override
public void onPause() {
super.onPause();
locationManager.removeUpdates(this); // Error here
savePrefs();
}

如何在 fragment 中使用这些方法?

最佳答案

您混淆了 LocationManager 和实际接收更新的 LocationListener 之间的关系。例如,您指示错误的 onLocationChanged 实际上是一个回调,您分配给 LocationManagerLocationListener 用于将新的位置对象传递给您的 Activity/fragment 。这不是你自称的东西。

LocationListenerLocationManager 交互的方式类似于这样。您的 fragment 中会有两者的实例。 onActivityCreated 您将同时初始化 LocationManagerLocationListener,并使用 LocationListener 实现以下所有必需的回调。

 locationListener = new LocationListener(){

@Override
public void onLocationChanged(Location location) {
GeoPoint userLoc = processNewLocation(location);
if(userLoc != null){
Log.d("USERLOC", userLoc.toString());
//do something with the location
}
}

@Override
public void onProviderDisabled(String provider) {
locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}

@Override
public void onProviderEnabled(String provider) {
locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}

};

您的 LocationListner 将在每次位置更改满足您在创建时分配的任何标准时调用 onLocationChanged。检查 android 文档中的 LocationManagerLocationListener更多细节。

关于android - fragment 内的 LocationManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20352151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com