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

想到這爲什麼會花這麼長時間?

回答