2016-07-15 18 views
2

Ich bin neu in Android und ich versuche, eine Android-App zu entwickeln, die den aktuellen Standort des Benutzers anzeigt. Ich benutze Genymotion. Jetzt verwende ichDen aktuellen Standort des Benutzers in Android finden

mLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleClient); 

, um den letzten Standort des Geräts zu erhalten. Die Sache ist, ich wollte den aktuellen Standort bekommen, aber damit bekomme ich mlocation als nicht null, das ist in Ordnung. In der Karte wird jedoch immer der letzte Standort des Geräts angezeigt, nicht der aktuelle Standort.

Code-Schnipsel

@Override 
public void onConnected(Bundle bundle) { 
    Log.i(TAG, "inside onconnected Location services connected"); 
    Location mLocation=null; 
    mLocationRequest= new LocationRequest(); 
    mLocationRequest.setInterval(10 * 1000) ; 
    mLocationRequest.setFastestInterval(1 * 1000);mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != 
     PackageManager.PERMISSION_GRANTED && 
     ActivityCompat.checkSelfPermission(this, 
     Manifest.permission.ACCESS_COARSE_LOCATION) != 
     PackageManager.PERMISSION_GRANTED) { 

    } 
       mLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleClient); 
    if(mLocation==null) 
    { 
     Log.d("***Inside mlocation***", "***mlocation is null here"); 
    } 

    if (mLocation != null) { 
     onLocationChanged(mLocation); 
    } 
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleClient, mLocationRequest, this); 
} 

@Override 
public void onLocationChanged(Location location) { 
    double currentLatitude = location.getLatitude(); 
    double currentLongitude = location.getLongitude(); 
    LatLng latLng = new LatLng(currentLatitude,currentLongitude); 
    MarkerOptions options = new MarkerOptions() 
      .position(latLng) 
      .title("Im here!"); 

    mMap.addMarker(options); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
} 

und in onstart() rief ich googleapi.connect() und ich setUpMapIfNeeded() angemessen.

Bitte sagen Sie mir, was das Problem in diesem Code ist. Ich versuche das für 3 Tage.

+0

In Ihrem Code nicht erwähnt GPS ein/aus. sollten Sie GPS während App forground einschalten. –

+0

Hallo Jay, der GPS in meinem Emulator ist eingeschaltet, aber was ich von Ihrer Aussage verstanden habe, muss ich auf die Verfügbarkeit von GPS überprüfen, bin ich richtig .. ?? aber dann macht es auch keinen Unterschied, denke ich. – Navi

+0

überprüfen Sie meine Antwort @Navi –

Antwort

0

Für den Kartenservice werden Google Play-Dienste benötigt. Stellen Sie sicher, dass Ihr Genymotion PlayService installiert hat, wenn nicht. Holen Sie sich eine Hilfe von Here So installieren Sie Google Play Servies in Genymotion. Glückliche Kodierung .. !!!

+0

Hallo raj, Google Play-Dienste sind korrekt installiert. – Navi

+0

Google Map API mit Android Offizielle Dokumentation Hier-> https://developers.google.com/maps/documentation/android-api/ –

0
 LocationListener locationListener; 
     LocationManager locationManager; 
     double latitude; 
     double longitude; 


     locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 


     locationListener = new LocationListener() 
     { 
      @Override 


      public void onLocationChanged(Location location) { 

    longitude = location.getLongitude(); 
    latitude = location.getLatitude(); 
    } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 
      } 

      @Override 
      public void onProviderEnabled(String provider) { 
      } 

      @Override 
      public void onProviderDisabled(String provider) { 
      } 
     }; 
     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. 

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



     Log.e("location", longitude + " " + latitude); 
+0

versuchen Sie diesen Code ... das sollte gut funktionieren – nandish

+0

Hallo Nandish ich habe den gleichen Code hinzugefügt und geändert entsprechend, aber immer noch bekomme ich den gleichen alten Standort. und hier im obigen Code habe ich einen Zweifel, wenn OnLocationChanged() aufgerufen wird, ist das Standortobjekt null rechts .. ?? da wir keinen Wert daran weitergeben .. und bitte schlage mir vor .. – Navi

1

Buchung einfache Lösung mit Code.

hinzufügen Berechtigungen innerhalb AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Datei, wenn Sie app Eibisch kompatibel ist dann Prüflauf Zeit Erlaubnis.

Abhängigkeit innerhalb gradle Datei hinzufügen:

compile 'com.google.android.gms:play-services:9.2.0' 

implementiert diese zwei Schnittstelle in Ihnen Aktivität

GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener 

und

erstellen googleapiclient Objekt wie folgt in oncreate:

mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 

und diese Aktivität auf Anfang machen

mGoogleApiClient.connect(); 

wir hier auf Ergebnis Rückruf Lage auf dieser Überschreibung Methode.

public void onConnected(@Nullable Bundle bundle) { 
    Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
    if (mLastLocation != null) { 
     Log.e(TAG, "onConnected: " + String.valueOf(mLastLocation.getLatitude()) + ":" + String.valueOf(mLastLocation.getLongitude())); 
    } else { 
     Toast.makeText(getApplicationContext(), "Your Location Not Found", Toast.LENGTH_LONG).show(); 
    } 
} 

vollständige Code der Tätigkeit ist so etwas wie das:

public class LocationActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

private static final String TAG = LocationActivity.class.getSimpleName(); 

private GoogleApiClient mGoogleApiClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_location); 


    // Create an instance of GoogleAPIClient. 
    if (mGoogleApiClient == null) { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 
} 

@Override 
protected void onStart() { 
// connect googleapiclient 
    mGoogleApiClient.connect(); 
    super.onStart(); 
} 

@Override 
protected void onStop() { 
// disconnect googleapiclient 
    mGoogleApiClient.disconnect(); 
    super.onStop(); 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
    if (mLastLocation != null) { 
    // here we go you can see current lat long. 
     Log.e(TAG, "onConnected: " + String.valueOf(mLastLocation.getLatitude()) + ":" + String.valueOf(mLastLocation.getLongitude())); 
    } 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

}} 

P. S. googleapiclient funktioniert nicht im Emulator ohne Spieldienste, Sie müssen es also auf echten Geräten testen. stellen Sie bitte sicher, dass gps auf diesem Gerät aktiviert ist.

Wenn Sie traditionelle Methode für den Speicherort verwenden möchten, dann versuchen Sie dieses Tutorial. http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/

------ UPDATE 15. Juni ---------

für die neueste apis Check android google Beitrag: https://android-developers.googleblog.com/2017/06/reduce-friction-with-new-location-apis.html

+0

jay ich habe den gleichen Code wie oben geschrieben. genau das Gleiche mit etwas Zusatz von Marker das ist es .. aber nicht bekommen, was das Problem ist. – Navi

+0

Sie meinen, selbst nach der Installation der Google Play-Dienste in einem Emulator, funktioniert dieser Code nicht ..? wie meine geny motion alles installiert haben .. jetzt was ich tun muss .. muss ich es in meinem Android-Handy testen ..? – Navi

+0

Jay du weißt, was .. ich bekomme alles wie Breite Länge und mit Geocoder ich bin sogar in der Lage, Adresse auch zu bekommen .. aber das ist falsch, weil ich Emulator früheren Standort Breitengrad und Längengrad nicht mein derzeitiger Standort bekommen. Ich habe versucht, alle Wege nicht bekommen, was das Problem ist .. – Navi