2016-02-15 3 views
-1

Я разрабатываю приложение, в котором мне нужно местоположение пользователя, использующего GPS. Я получаю нулевое значение в объекте местоположения вместо координат. Но при использовании NETWORK_PROVIDER я получаю результат. Я хочу получить тот же результат с помощью GPS.Не удается получить местоположение с помощью GPS_PROVIDER

Вот мой код:

import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.location.LocationProvider; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

import static com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable; 
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,LocationListener { 

private GoogleMap mMap; 
boolean isGPSEnabled = false; 
Location location; 
double latitude; 
double longitude; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); 
    if(status == ConnectionResult.SUCCESS) { 
     System.out.println("enable"); 
     System.out.println(status); 
    } 
    // mMap.setMyLocationEnabled(true); 
    try { 

     LocationManager locationManager = (LocationManager)this.getSystemService(this.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     criteria.setPowerRequirement(Criteria.POWER_HIGH); 
     criteria.setAltitudeRequired(false); 
     criteria.setBearingRequired(false); 
     criteria.setSpeedRequired(false); 
     criteria.setCostAllowed(true); 
     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     // LocationProvider BestProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER); 
     if (isGPSEnabled) { 
      System.out.println("test5"); 
      location =locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000,1, this); 
      System.out.println(locationManager); 
      if (locationManager != null) { 
       System.out.println(location); 
       //requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       if (location != null) { 
        latitude = location.getLatitude(); 
        longitude = location.getLongitude(); 
        System.out.println("latitude:"+latitude); 
       } 
      } 
     } 
    } 
    catch(Exception e) { 
     System.out.println("Fail"); 
     e.printStackTrace(); 
    } 
} 

ответ

0

Ваше местоположение объекта называется location всегда пустой, потому что он никогда не присваивается значение в любом месте, прежде чем эта проверка делается

if (location != null) 

вы имели в виду, чтобы присвоить ему ценность как это?

location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

Пожалуйста, прочитайте примечание в LocationManager Javadoc о том, какие разрешения необходимо провести, чтобы получить результаты от поставщика GPS. Вам понадобится ACCESS_FINE_LOCATION.

И, наконец, обратите внимание, что GPS может получить некоторое время для получения точной информации. Когда вы используете getLastKnownLocation, не гарантируется наличие данных сразу. Возможно, вам придется ждать обновления первого местоположения. В этом случае вы должны использовать прослушиватель, чтобы дождаться первого точного местоположения.

Также вы можете найти official docs для получения более подробной информации об использовании поставщиков услуг.

+0

Я назначил значение, подобное location = locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER); – Ashu

+0

все еще не работает @Doug Stevenson – Ashu

+0

Это потому, что getLastKnownLocation все равно может вернуть значение null (согласно javadoc). –