2

Ich bin ein Anfänger Android-Entwickler. Ich verwende Android Studio, um eine App zu erstellen, die den genauen Standort angibt und sie in jedem Zeitraum aktualisiert. Ich habe GPS und Netzwerkanbieter verwendet, indem ich eine GPSTracker-Klasse erstellt habe, die mir den Längen- und Breitengrad gibt. Und dann zeigen Sie diese Koordinaten auf dem Kartenfragment an.Android Fused Loation mit Google API

Das Problem ist, dass ich immer wieder den gleichen Ort bekomme, der Länge und Breite gleich Null entspricht. Ich weiß, dass es viele Fragen zum Android-Standort gibt, aber ich kann dort keine Hilfe finden.

Dies ist, wo ich meine Karte

private void updateMap() { 
    mMap.clear(); 
    double latitude = gps.getLatitude(); 
    double longitude = gps.getLongitude(); 

    // Create a LatLng object for the current location 
    LatLng latLng = new LatLng(latitude, longitude); 
    // Show the current location in Google Map 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
    // Zoom in the Google Map 
    mMap.animateCamera(CameraUpdateFactory.zoomTo(1)); 
    mMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("You are here!").snippet("Estimated location!")); 
    //camera settings 
    CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(latLng, 1); 
    mMap.animateCamera(yourLocation); 
    CameraPosition cameraPosition = new CameraPosition.Builder() 
      .target(latLng)  // Sets the center of the map to LatLng (refer to previous snippet) 
      .zoom(1)     // Sets the zoom 
      .bearing(90)    // Sets the orientation of the camera to east 
      .tilt(30)     // Sets the tilt of the camera to 30 degrees 
      .build();     // Creates a CameraPosition from the builder 
    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
} 

Und das ist meine GPSTracker Klasse

public abstract class GPSTracker extends Service implements LocationListener { 
private final Context mContext; 
// flag for GPS status 
boolean isGPSEnabled = false; 
// flag for network status 
boolean isNetworkEnabled = false; 
// flag for GPS status 
boolean canGetLocation = false; 
Location location; // location 
double latitude; // latitude 
double longitude; // longitude 
double speed, direction; 
// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 
// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 
// Declaring a Location Manager 
protected LocationManager locationManager; 

public GPSTracker(Context context) { 
    this.mContext = context; 
    getLocation(); 
} 

public Location getLocation() { 
    try { 
     locationManager = (LocationManager) mContext 
       .getSystemService(LOCATION_SERVICE); 
     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 
     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     if (!isGPSEnabled && !isNetworkEnabled) { 
      Toast.makeText(this, "no network provider is enabled)", 
        Toast.LENGTH_LONG).show(); 
      showSettingsAlert(); 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      // First get location from Network Provider 
      if (isNetworkEnabled) { 
       Toast.makeText(this, "Network provider)", 
         Toast.LENGTH_LONG).show(); 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, (android.location.LocationListener) this); 
       Log.d("Network", "Network"); 
       if (locationManager != null) { 
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
         // TODO: Consider calling 
         // ActivityCompat#requestPermissions 
         // here to request the missing permissions, and then overriding 
         // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
         //           int[] grantResults) 
         // to handle the case where the user grants the permission. See the documentation 
         // for ActivityCompat#requestPermissions for more details. 
         return null; 
        } 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
       } 
      } 
      // if GPS Enabled get lat/long using GPS Services 
      if (isGPSEnabled) { 
       if (location == null) { 
        Toast.makeText(this, "GPS provider)", 
          Toast.LENGTH_LONG).show(); 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, (android.location.LocationListener) this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         Log.d("Getting location", "Location found"); 
         location = locationManager 
           .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return location; 
} 

/** 
* Stop using GPS listener 
* Calling this function will stop using GPS in your app 
* */ 
public void stopUsingGPS() { 
    if (locationManager != null) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
     locationManager.removeUpdates((android.location.LocationListener) GPSTracker.this); 
    } 
} 
/** 
* Function to get latitude 
* */ 
public double getLatitude(){ 
    if(location != null){ 
     latitude = location.getLatitude(); 
    } 
    // return latitude 
    return latitude; 
} 
/** 
* Function to get longitude 
* */ 
public double getLongitude(){ 
    if(location != null){ 
     longitude = location.getLongitude(); 
    } 
    // return longitude 
    return longitude; 
} 
public double getSpeed(){ 
    return speed; 
} 
public double getDirection(){ 
    return direction; 
} 
/** 
* Function to check GPS/wifi enabled 
* @return boolean 
* */ 
public boolean canGetLocation() { 
    return this.canGetLocation; 
} 
/** 
* Function to show settings alert dialog 
* On pressing Settings button will launch Settings Options 
* */ 
public void showSettingsAlert(){ 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 
    // Setting Dialog Title 
    alertDialog.setTitle("GPS is settings"); 
    // Setting Dialog Message 
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 
    // On pressing Settings button 
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog,int which) { 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      mContext.startActivity(intent); 
     } 
    }); 
    // on pressing cancel button 
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 
    // Showing Alert Message 
    alertDialog.show(); 
} 
@Override 
public void onLocationChanged(Location location) { 
    if(location != null){ 
     speed = location.getSpeed(); 
     direction = location.getBearing(); 
    } 
} 
+0

Sorry für mein schlechtes zu ermöglichen Englisch – Bdevelop

+0

versuchen Sie dies auf einem Gerät oder Emulator? Welche Android-Version verwendest du? Können Sie Google Maps öffnen und sehen, ob die App in der Lage ist, Ihren Standort anzuzeigen –

+0

Ich benutze Android 2.1.2 und eine virtuelle Emulator Nox App, aber der aktuelle Standort wird nicht auf der Google-Karte angezeigt – Bdevelop

Antwort