2016-05-08 9 views
-1

Ich habe manager.requestLocationUpdates("gps", 1000, 0, new LocationDetector()); verwendet, um Update nach jeder Sekunde zu erhalten. Aber diese Methode löst niemals onLocationChanged() Methode aus. Ich habe meine Anwendung viele Male ausgeführt, und ich habe auch versucht, bis zu 30 Minuten zu warten, um ein Update zu erhalten, aber auf Android Monitor wird kein Update angezeigt. Ich habe auch das GPS meines Geräts überprüft, das eingeschaltet ist. Also, bitte, was kann das Problem sein?onLocationChanged() ist nie trigered by requestLocationUpdate() - Android

Code:

public class LocationDetector implements LocationListener { 
    @Override 
    public void onLocationChanged(Location location) { 
     Log.d("GPS: ", location.getLatitude()+ ", " +location.getLongitude()); 
    } 

Ausgang: enter image description here

+0

die OnLocationChanged() Funktion wird nur aufgerufen, wenn Ihre Position ändert. Haben Sie versucht, Ihre Position zu ändern, um dies auszulösen? –

+0

Sie können https://www.genymotion.com/ verwenden, um Mockpositionen anzugeben, damit Sie nicht physisch zum Testen der Funktion onLocationChanged() wechseln müssen –

+0

Ich habe 'minimum distance = 0' in' requestLocationUpdates gesetzt() 'was bedeutet, dass die Aktualisierung nach 1 Sekunde generiert wird, auch wenn die Standortänderung 0 Meter beträgt. @ Chepe77 –

Antwort

0

Dies ist ein Duplikat this question, auch von Ihnen gefragt. In jedem Fall können Sie versuchen, GoogleAPIClient mit - wie folgt aus:

LocationRequest locationRequest = LocationRequest.create(); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setInterval(60000); // update every (1) minutes    
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient,locationRequest, yourLocationDetector); 

Wo die googleApiClient instanziiert wird und in einigen Hilfsmethode wie folgt angeschlossen:

/** 
    * Helper method to connect the Google API Client 
    */ 
    private void connectGoogleAPIClient() { 
     googleApiClient = new GoogleApiClient.Builder(context) 
           .addApi(LocationServices.API) 
           .addConnectionCallbacks(this) 
           .addOnConnectionFailedListener(this) 
           .build(); 
     googleApiClient.connect(); 
    } 

Sie müssen auch sicher, dass Sie machen hinzugefügt haben die Erlaubnis:

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

Ihr Problem mit dem one discussed here in Zusammenhang stehen könnten - so wenden Sie sich bitte Schauen Sie sich auch die ausgewählte Antwort an und sehen Sie, ob es auch Ihrem Fall hilft. Diese

0

ist, was eine typische Standortanfrag sollte wie folgt aussehen:

Anmerkung: Ich habe Activity als Parameter, weil ich dies von einer Aktivität nennen. Es ist in meiner Util-Klasse.

public static void getLocation(Activity activity) { 
    final LocationListener locationListener = new LocationListener() { 
     @Override 
     public void onProviderEnabled(String provider) { 
      Log.i(TAG, "onProviderEnabled"); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Log.i(TAG, "onProviderDisabled"); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      Log.i(TAG, "onLocationChanged"); 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      Log.i(TAG, "onStatusChanged"); 
     } 
    }; 

    final LocationManager locationManager = (LocationManager) appContext.getSystemService(Context.LOCATION_SERVICE); 
    final Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setCostAllowed(false); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setSpeedRequired(false); 

    activity.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      locationManager.requestLocationUpdates(1000, 0, criteria, locationListener, null); 
     } 
    }); 
} 

EDIT: wie @ishmaelMakitla sagte

stellen Sie sicher, die folgende Berechtigung haben:

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