2016-06-26 3 views
1

Ich versuche Lat und Long-Werte in einem Textview für jede Sekunde zu aktualisieren, und ich habe diese App auf Kitkat Gerät ausgeführt.Fused location provider scheint keine Aktualisierung der Koordinaten gemäß dem eingestellten Intervall

Beobachtung: kann sehen Die Positionskoordinaten werden nicht entsprechend dem Intervall aktualisiert.

"MainActivity.java"

public class MapsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener { 

private final String TAG = "ravimaps"; 

private GoogleApiClient mGoogleApiClient; 
private LocationRequest mLocationRequest; 
private TextView lats; 
private TextView longs; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    mGoogleApiClient=new GoogleApiClient.Builder(this) 
      .addApi(LocationServices.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 

    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) { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (LocationListener) this); 
    } 

} 

@Override 
public void onLocationChanged(Location location) 
{ 
    Log.i(TAG,location.toString()); 
    lats.setText(Double.toString(location.getLatitude())); 
    longs.setText(Double.toString(location.getLongitude())); 
    } 


    @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(); 
} 

}

+0

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? –

+0

Ich kann die Koordinaten bekommen, aber es wird nicht aktualisiert. – ferraro

Antwort

0

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.

Verwandte Themen