0

我有问题在我的地图活动中获取位置。基本上,它获得的位置,但需要很长时间(几分钟)。我正在使用请求单个位置更新来检索我的位置的单身人士。这适用于我的应用中的多个其他实例。但是,当我在地图活动中尝试它时,需要很长时间。这里是我用来获取位置的课程:获取用户位置需要很长时间Google Map FragmentActivity

public class SingleShotLocationProvider { 

public interface LocationCallback { 
    void onNewLocationAvailable(GPSCoordinates location); 
} 

public static void requestSingleUpdate(final Context context, final LocationCallback callback) { 
    final LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

    //If network is available 
    if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
     Log.i("SingleShot", "network available"); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
     try { 
      locationManager.requestSingleUpdate(criteria, new LocationListener() { 
       @Override 
       public void onLocationChanged(Location location) { 
        callback.onNewLocationAvailable(new GPSCoordinates(location.getLongitude(), location.getLatitude())); 
       } 
       @Override public void onStatusChanged(String provider, int status, Bundle extras) {} 
       @Override public void onProviderEnabled(String provider) {} 
       @Override public void onProviderDisabled(String provider) {} 
      }, null); 
     } 
     catch (SecurityException e){ 
      Log.e("Location", "security exception"); 
     } 
    } 
    //If GPS is enabled 
    else if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     Log.i("SingleShot", "GPS available"); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     try { 
      locationManager.requestSingleUpdate(criteria, new LocationListener() { 
       @Override 
       public void onLocationChanged(Location location) { 
        callback.onNewLocationAvailable(new GPSCoordinates(location.getLongitude(), location.getLatitude())); 
       } 
       @Override public void onStatusChanged(String provider, int status, Bundle extras) {} 
       @Override public void onProviderEnabled(String provider) {} 
       @Override public void onProviderDisabled(String provider) {} 
      }, null); 
     } 
     catch (SecurityException e){ 
      Log.e("SingleShot", "security exception"); 
     } 
    } 
    else{ 
     Toast.makeText(context, "No network or GPS available. Try again later.", Toast.LENGTH_LONG).show(); 
    } 
} 


public static class GPSCoordinates { 
    public float longitude = -1; 
    public float latitude = -1; 

    public GPSCoordinates(double lon, double lat) { 
     longitude = (float) lon; 
     latitude = (float) lat; 
    } 
} 
} 

该课程在我的应用程序的大多数领域都能很好地工作。它在服务和片段中起作用。但是,当我在地图活动(FragmentActivity)中使用它时,单例需要很长时间才能使用我发送的回调。以下是我如何从我的地图活动请求新位置:

public class Traffic extends FragmentActivity 
    implements OnMapReadyCallback { 
    MapFragment mapFragment; 
    GoogleMap map; 
    //... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_map); 
     mapFragment = (MapFragment) getFragmentManager() 
      .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     //... 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     map = googleMap; 
     map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 

     SingleShotLocationProvider.requestSingleUpdate(getApplicationContext(), new SingleShotLocationProvider.LocationCallback() { 
       @Override 
       public void onNewLocationAvailable(SingleShotLocationProvider.GPSCoordinates location) { 
        Log.i(TAG, location.toString()); 
       } 
      }); 
    } 
} 

想到这为什么会花这么长时间?

回答