2016-09-14 4 views
0

Я хочу использовать API LocationManager для получения текущего местоположения по сети.getLastKnownLocation (LocationManager.NETWORK_PROVIDER) возвращает местоположение (1.0, 1.0)

Мой код:

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

if (isNetworkEnabled) { 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, this); 
    Log.d("Network", "Network Enabled"); 

    if (locationManager != null) { 
     location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     if (location != null) { 
      double latitude = location.getLatitude(); 
      double longitude = location.getLongitude(); 
     } 
    } 
} 

Проблема заключается в том, как широта и долгота меня равны 1.0.

ответ

0

Google Maps использует пользователь lastKnownLocation для размещения, если lastknownLocation неизвестно это занимает время, чтобы принести место через другой провайдер сказать GPS или Network. Я бы предложил использовать lastKnownLocation в качестве базового местоположения и обновить его с помощью LocationListener.

 if (ActivityCompat.checkSelfPermission 
       (this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
       && 
       ActivityCompat.checkSelfPermission 
         (this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
     { 
      requestPermissions(new String[]{ 
        Manifest.permission.ACCESS_COARSE_LOCATION, 
        Manifest.permission.ACCESS_FINE_LOCATION 
      }, 1); 

     } 
     else { 

      // enable location buttons 
      googleMap.setMyLocationEnabled(true); 
      googleMap.getUiSettings().setMyLocationButtonEnabled(true); 

      // fetch last location if any from provider - GPS. 
      final LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
      final Location loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      //if last known location is not available 
      if (loc == null) { 

       final LocationListener locationListener = new LocationListener() { 
        @Override 
        public void onLocationChanged(final Location location) { 

         // getting location of user 
         final double latitude = location.getLatitude(); 
         final double longitude = location.getLongitude(); 
         //do something with Lat and Lng 
        } 

        @Override 
        public void onStatusChanged(String provider, int status, Bundle extras) { 
        } 

        @Override 
        public void onProviderEnabled(String provider) { 
         //when user enables the GPS setting, this method is triggered. 
        } 

        @Override 
        public void onProviderDisabled(String provider) { 
         //when no provider is available in this case GPS provider, trigger your gpsDialog here. 
        } 
       }; 

       //update location every 10sec in 500m radius with both provider GPS and Network. 

      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10*1000, 500, locationListener); 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 500, locationListener); 
      } 
      else { 
       //do something with last known location. 
       // getting location of user 
       final double latitude = loc.getLatitude(); 
       final double longitude = loc.getLongitude(); 
      } 
     } 

обработка Разрешение:

 @Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 

     case 1: 
      if (grantResults[0] != PackageManager.PERMISSION_GRANTED){ 
       //do something 
      } 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 
Смежные вопросы