2017-07-26 181 views
1

我需要從主類獲取位置或緯度經度,但如果我獲得位置或返回null,如果我獲得緯度和經度,如下面的代碼。試圖儘量減少代碼,並儘可能將其清除。谷歌地圖GPS:經度和緯度返回零

這裏是服務類,我需要從主類獲得位置

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我得到這個經度和lattitude

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

回答

0

找到了解決方案重刑:主類:

 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; 
} 
相關問題