2012-04-13 32 views
2

OnLocationChanged() wird nicht aufgerufen, obwohl requestLocationUpdates hinzugefügt wird und daher zeigt map nicht den aktuellen Standort an.
Karte zeigt immer ihren Standard-Mock-Standort an. Bitte schlagen Sie vor, das Problem zu lösen. Ich habe alle erforderlichen Berechtigungen in der Manifestdatei hinzugefügt.
Hinweis: Ich möchte nicht den letzten Ort mit getLastKnownLocation, sondern ich möchte den aktuellen Standort. Ich habe gewartet, bis das Gerät den Fehler behoben hat. Manchmal benötigt das GPS mehr Zeit als gewöhnlich, aber immer noch keine Verbesserung. Ich bin mit dem Gerät auch fast 10 Kilometer weit gereist. :-).
Hier ist der Code, den ich verwendet habe.OnLocationChanged wird nicht aufgerufen

public class TestingmapActivity extends MapActivity implements LocationListener { 

private MapController myMapController; 
private MapView mapView; 
private LocationManager myLocationManager; 
private double m_dLati = 12.913469, m_dLongi = 77.609761; 
String provider; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    mapView = (MapView) findViewById(R.id.mapview); 
    myMapController = mapView.getController(); 
    provider = LocationManager.GPS_PROVIDER; 
    mapView.setBuiltInZoomControls(true); 
    mapView.setStreetView(true); 
    myMapController.setZoom(14); // Zoon 1 is world view 
    myLocationManager.requestLocationUpdates(provider, 0, 0,this); 
    setMockLocation(m_dLati, m_dLongi, 500); 
} 

@Override 
protected void onResume() { 
    startListening(); 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    stopListening(); 
    super.onResume(); 
} 

@Override 
protected void onStop() { 
    stopListening(); 
    super.onStop(); 
} 

private void startListening() { 
    if (myLocationManager != null) { 
     myLocationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 0, 0, this); 
    } 
} 

private void stopListening() { 
    if (myLocationManager != null) 
     myLocationManager.removeUpdates(this); 
} 

@Override 
protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
} 

private void setMockLocation(double latitude, double longitude, 
     float accuracy) { 
    Log.v("", "provider name= " + provider); 
    myLocationManager.addTestProvider(provider, "requiresNetwork" == "", 
      "requiresSatellite" == "", "requiresCell" == "", 
      "hasMonetaryCost" == "", "supportsAltitude" == "", 
      "supportsSpeed" == "", "supportsBearing" == "", 
      android.location.Criteria.POWER_LOW, 
      android.location.Criteria.ACCURACY_FINE); 
    Location newLocation = new Location(provider); 
    newLocation.setLatitude(latitude); 
    newLocation.setLongitude(longitude); 
    newLocation.setAccuracy(accuracy); 
    Toast.makeText(
      getApplicationContext(), 
      "Mock: New Latitude = " + newLocation.getLatitude() 
        + " New Longitude = " + newLocation.getLongitude(), 
      Toast.LENGTH_LONG).show(); 
    myLocationManager.setTestProviderEnabled(provider, true); 
    myLocationManager.setTestProviderStatus(provider, 
      LocationProvider.AVAILABLE, null, System.currentTimeMillis()); 
    myLocationManager.setTestProviderLocation(provider, newLocation); 
} 

@Override 
public void onLocationChanged(Location location) { 
    Log.v("LocationListener", "onLocationChanged " + location.getLatitude() 
      + " , " + location.getLongitude()); 
    int lat = (int) (location.getLatitude() * 1E6); 
    int lng = (int) (location.getLongitude() * 1E6); 
    GeoPoint point = new GeoPoint(lat, lng); 
    myMapController.animateTo(point);  
} 

@Override 
public void onProviderDisabled(String provider) {} 

@Override 
public void onProviderEnabled(String provider) {} 

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

Manifest Berechtigungen:

<uses-permission android:name="android.permission.ACCESS_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.LOCATION" /> 

Danke, Biplab

+0

Wie wäre es, die Antwort auf Ihre letzte Frage zu akzeptieren? – user370305

+0

Entschuldigung, das wusste ich nicht. Ich habe die Antwort-Antwort-Schaltfläche für die letzte Frage markiert. Danke für die Antwort. –

+0

Sie überprüfen es auf dem Gerät ?? Und testen Sie es draußen? –

Antwort

-1

versuchen, es zu verwenden, außerhalb von room..because GPS funktioniert nicht auf dem Platz in indoor..depending .. es funktioniert perfekt in outdoor ..

+0

Ich habe fast 10 km Fläche abgedeckt, um die Anwendung zu testen. Es hat nicht funktioniert. –

+0

Ich bezweifle so im April 2012, aber es ist definitiv kein Problem, jetzt Hulk – ericn

+0

Mai..aber in ApriL'12 war es ein Problem .. – Hulk

0

@Biplab Kundu - Überschreiben Sie Anbieter in Ihrer setMockLocation Methode? Bitte überprüfen Sie noch einmal diese Methode.

+0

setMockLocation ist keine überschriebene Funktion. Ich habe das geschrieben, um einen Ort in der Karte zu setzen, wie der Breiten- und Längengrad als Argument übergeben wurde. –

+0

@SandipJadhav Sie meinen 'LocationServices.FusedLocationApi'? –

+0

Ich implementiere onLocationChangeListener –