【问题标题】:Google maps GPS: longitude and latitude returns zero谷歌地图GPS:经纬度归零
【发布时间】:2017-07-26 11:53:15
【问题描述】:

我需要从 Main 类中获取位置或纬度经度,但如果我获取位置,则返回 null,如果获取纬度和经度,则返回 0.0,如下面的代码所示。尽量减少代码并尽可能清晰。

这是我需要从主类获取位置的服务类

public void onLocationChanged(Location location)
    {
        Log.e(TAG, "onLocationChanged: " + location);
        mLastLocation.set(location);

        if(MainActivity.isMarkerDragged()) {

            Location markerLocation = new Location(LocationManager.GPS_PROVIDER);
            markerLocation.setLatitude(MainActivity.getMarkerLat());
            markerLocation.setLongitude(MainActivity.getMarkerLon());

            Toast.makeText(mContext, MainActivity.getMarkerLon() + " = " + MainActivity.getMarkerLat(), Toast.LENGTH_SHORT).show();

            // Current location
            distance = location.distanceTo(markerLocation);
            Toast.makeText(mContext, "marker dragged " + distance, Toast.LENGTH_SHORT).show();

        }
    }

在 onLocationChanged 方法上,我得到了这个经度和纬度

endPoint.setTitle(endPoint.getPosition().longitude + ", " + endPoint.getPosition().latitude);

这按计划工作,但是当我获得服务位置时,它返回 0.0(糟透了)

public static Marker endPoint;
public static boolean markerDragged = true;
public static boolean serviceStarted = false;

private static double markerLat;
private static double markerLon;

/**
 * Gets the current location of the device, and positions the map's camera.
 */
private void getDeviceLocation() {
    /*
     * Request location permission, so that we can get the location of the
     * device. The result of the permission request is handled by a callback,
     * onRequestPermissionsResult.
     */
    if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        mLocationPermissionGranted = true;
    } else {
        ActivityCompat.requestPermissions(this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
    }
    /*
     * Get the best and most recent location of the device, which may be null in rare
     * cases when a location is not available.
     */
    if (mLocationPermissionGranted) {
        mLastKnownLocation = LocationServices.FusedLocationApi
                .getLastLocation(mGoogleApiClient);
    }

    // Set the map's camera position to the current location of the device.
    if (mCameraPosition != null) {
        mMap.moveCamera(CameraUpdateFactory.newCameraPosition(mCameraPosition));
    } else if (mLastKnownLocation != null) {
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(mLastKnownLocation.getLatitude(),
                        mLastKnownLocation.getLongitude()), DEFAULT_ZOOM));

        // Adding a marker
        endPoint = mMap.addMarker(new MarkerOptions()
                .draggable(true)
                .position(new LatLng(mLastKnownLocation.getLatitude(),
                        mLastKnownLocation.getLongitude())));
        endPoint.setTitle(getString(R.string.drag));
    } else {
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mDefaultLocation, DEFAULT_ZOOM));
        mMap.getUiSettings().setMyLocationButtonEnabled(false);
    }
}
@Override
public void onMarkerDragEnd(Marker marker) {
    if(!serviceStarted) {
        startService(new Intent(this, LocationService.class));
    }
}

@Override
public void onMarkerDragStart(Marker marker) {
    setMarkerDragged(true);

    markerLat = marker.getPosition().latitude;
    markerLon = marker.getPosition().longitude;

    endPoint.setTitle(endPoint.getPosition().longitude + ", " + endPoint.getPosition().latitude);
}

public static double getMarkerLon(){
    return markerLon;
}

public static double getMarkerLat(){
    return markerLat;
}

【问题讨论】:

    标签: java android google-maps gps location


    【解决方案1】:

    找到解决方案:在主类上:

            Intent intent = new Intent(this, LocationService.class);
            intent.putExtra("latitude", endPoint.getPosition().latitude);
            intent.putExtra("longitude", endPoint.getPosition().longitude);
            startService(intent);
    

    在服务上:

    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Log.e(TAG, "onStartCommand");
        super.onStartCommand(intent, flags, startId);
        markerLat = (Double) intent.getExtras().get("latitude");
        markerLon = (Double) intent.getExtras().get("longitude");
        return START_STICKY;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多