gpt4 book ai didi

android - 在 fragment 中使用 LocationListener

转载 作者:行者123 更新时间:2023-12-04 18:10:18 25 4
gpt4 key购买 nike

我可以在 fragment 中使用 LocationListener 和 LocationManager 获取用户位置吗?或者我是否需要从底层 Activity 中使用 LocationListener 并使用接口(interface)(或其他方法)将数据传输回 fragment ?由于更改应用程序用户界面,我正在将 Activity 转换为 fragment 。当我使用独立 Activity 时,获取位置没有问题,但是,现在我已将 Activity 变成 fragment 后,我无法返回任何位置。

下面是我如何添加 LocationListener。它之前被声明为 LocationListener locationListener。

private void addLocationListener(){
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

}

};
}

注意:processNewLocation 只是将位置转换为 GeoPoint。它甚至没有那么远,因为没有获得任何位置。

这是向位置管理器注册监听器的代码

public void addLocationManager(){
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
}

private void getLocationFromNetwork(){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, locationListener);
Log.d("GET NETWORK", "Listener registered");
}

private void getLocationFromGPS(){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, locationListener);
Log.d("GET GPS", "Listener registered");
}

private Location getLastLocation(){
Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
return lastKnownLocation;
}

最佳答案

在您上面发布的代码中,您从未向 LocationManager 注册 LocationListener。您需要在 Fragment 创建代码中某处的 onProviderEnabled 代码中使用这样的代码:

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);
}

onProviderEnabled 回调只有在您向位置管理器注册之后才会发生。

关于android - 在 fragment 中使用 LocationListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15098878/

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