无法使用GPS提供商获得lat和long

时间:2014-01-07 13:15:44

标签: android gps

ReminderLogic服务类调用GPSTracker服务类。 isGPSEnabled是真的。 GPS在设备中亮起,显然在天空视野下。 lat和long仍为0.0。

location = locationManager
                                .getLastKnownLocation(Context.LOCATION_SERVICE);

location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);

将位置设为null。

有人可以帮助我。

// ReminderLogic服务类

            GPSTracker gps;
        double CurrLatitude, CurrLongitude;
        Location CurrentLoc;
        gps = new GPSTracker(HomePageActivity.this); 
if (gps.canGetLocation()) {
                CurrLatitude = gps.getLatitude();
                CurrLongitude = gps.getLongitude();

                Toast.makeText(
                        getApplicationContext(),
                        "canGetLocation is True. CurrLatitude and CurrLongitude is "
                                + CurrLatitude + CurrLongitude, Toast.LENGTH_LONG)
                        .show();
            }

// GPS追踪服务类

          if (isGPSEnabled) {

                this.canGetLocation = true;
                if (location == null) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER, 0, 0, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(Context.LOCATION_SERVICE);
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }

3 个答案:

答案 0 :(得分:1)

尝试覆盖 onLocationChanges(位置位置)

      @Override
     public void onLocationChanged(Location location) {
    if (location != null)
    {
        Log.i("SuperMap", "Location changed : Lat: " + location.getLatitude() + " Lng: " + location.getLongitude());
        latitude = location.getLatitude();
        longitude = location.getLongitude();
        Log.i("latitude,longitude", ""+latitude+","+longitude);


    } 
}

答案 1 :(得分:1)

首先,我将向您解释为什么您的代码无效。

您正在使用GPS获取位置,这需要一些时间来获取您的位置并获取位置触发onLocationChanged听众。

但是,在您的代码中,您要求GPS使用

获取您的位置
locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER, 0, 0, this);

然后期望它能在一秒钟内为您提供位置。当GPS跟踪您时,您需要LocationListener来收听该位置。这可能需要20分钟,取决于GPS是否可以直接访问卫星,例如。如果您的设备位于建筑物内,GPS将需要几分钟才能跟踪您,但如果您打开GPS,则会快速跟踪您。

要使用LocationListener,只需在您的班级声明中添加implements LocationListener即可。然后在onLocationChanged()中使用以下内容获取您的位置。

@Override
     public void onLocationChanged(Location location) {
    if (location != null)
    {
       Log.d("Location Found", location.getLatitude() + " " + location.getLongitude());
    locationManager.removeUpdates(this);
    } 
}

locationManager.removeUpdates(this);阻止android无休止地向你发送位置,这很重要。

此外,您可以使用

在内部LocationListener
LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
              Log.d("Location Found", location.getLatitude() + " " + location.getLongitude());
    locationManager.removeUpdates(this);
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

        }
    }

但你必须像这样更新requestLocationUpdates()

locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER, 0, 0, locationListener);

更新: -

您正在检查locationManager之后requestLocationUpdates()是否为空,但在您初始化之后它不会为空。然后你正在使用

location = locationManager
                                .getLastKnownLocation(Context.LOCATION_SERVICE);

获取最后一个已知位置,只有在您之前使用任何应用获取位置时才会出现该位置。例如。如果您使用Google地图应用获取您的位置,那么在Google地图检测到您的位置后,您打开自己的应用,那么您将获得 LastKnownLocation 。这是因为android拥有你过去的位置。

如果您以前从未获得任何位置,那么您将无法获得任何结果。此外,这是错误的编码方式。你应该这样做

location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
}
else{
locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER, 0, 0, this);
}

这样,如果你有一个以前的位置,你可以使用它,如果没有,那么你得到一个新位置。

答案 2 :(得分:0)

将您的代码更改为:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null) {
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if (location != null) {
        latitude = location.getLatitude();
        longitude = location.getLongitude();
    }
}

希望这有帮助。