Ich reparierte Code. Markieren Sie diese Antwort als Antwort auf Ihre Frage, nachdem Sie auf dem Gerät oder Emulator das erwartete Ergebnis mit dem unten stehenden Code angezeigt bekommen haben. Bitte schön!
Sie hatten kein privates Objekt Location
, um den letzten bekannten/aktuellen Standort mit Ihrem Objekt GoogleApiClient
und LocationListener
für die Abfrage zu erhalten. Ich habe beides hinzugefügt. Außerdem habe ich zwei Variablen, die Sie jetzt Ihre Anfragen für Standorte verwenden können, um parametrisieren:
float LOCATION_REFRESH_DISTANCE = 5000;
long LOCATION_REFRESH_TIME = 0;
Bitte bearbeiten YOUR_PROJECT
in dem folgenden Code Bevor Tests/es zu benutzen.
Ihre neue Java-Datei:
package YOUR_PROJECT;
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.model.LatLng;
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
private final String TAG = "ravimaps";
private LocationManager locationManager;
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
private TextView lats;
private TextView longs;
private Location mLastLocation;
LatLng newPosition;
LocationListener mlocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
mLastLocation=location;
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
lats = (TextView) findViewById(R.id.lat);
longs = (TextView) findViewById(R.id.Lng);
}
@Override
public void onConnected(Bundle bundle) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(1000);
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
float LOCATION_REFRESH_DISTANCE = 5000;
long LOCATION_REFRESH_TIME = 0;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mlocationListener);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if(mLastLocation!=null){
Toast.makeText(getApplicationContext(), "YES! mLastLocation!=null", Toast.LENGTH_SHORT).show();
Log.i(TAG, mLastLocation.toString());
lats.setText(Double.toString(mLastLocation.getLatitude()));
longs.setText(Double.toString(mLastLocation.getLongitude()));
double latitude = mLastLocation.getLatitude(); //Save latitude in a double variable
double longitude = mLastLocation.getLongitude(); //Save longitude in a double variable
//Toast to display Coordinates
Toast.makeText(getApplicationContext(), "Latitude = " + latitude + "\nLongitude = " + longitude, Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
mGoogleApiClient.disconnect();
super.onStop();
}
}
Ihre neue (?/Alt) XML-Datei
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="YOUR_PROJECT.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lat"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="47dp"
android:layout_marginStart="47dp"
android:layout_marginTop="171dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Lng"
android:layout_centerVertical="true" />
</RelativeLayout>
Last but not least. Vergessen Sie nicht zu:
1.'compile 'com.google.android.gms:play-services:+'
in Ihrem src/build.gradle
wie folgt aus:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.google.android.gms:play-services:+'
}
2. die erforderlichen Berechtigungen, um Ihre in AndroidManifest.xml
ich alle folgenden Berechtigungen hinzugefügt aber Sie brauchen nicht alle von ihnen:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MOCK_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Bemerkung: Ich konzentrierte mich darauf, das richtige Verhalten basierend auf Ihren Erwartungen und Ihrem Originalcode zu implementieren. Diese Implementierung ist nicht optimiert.
Sie haben gesagt: 'kann sehen, dass die Standortkoordinaten nicht entsprechend dem Intervall aktualisiert werden.Sollten Ihnen die Koordinaten Ihres aktuellen Standorts angezeigt werden? Ist das Problem, keine Koordinaten zu sehen oder nur ein Standort-Update zu erhalten? –
Ich kann die Koordinaten bekommen, aber es wird nicht aktualisiert. – ferraro