2012-04-13 16 views
2

OnLocationChanged()が呼び出されていませんが、requestLocationUpdatesが追加されているため、マップは現在の位置を示していません。
マップは常にデフォルトのモックの位置を示しています。問題を解決するために提案してください。マニフェストファイルに必要な権限をすべて追加しました。
注:getLastKnownLocationを使用して最終位置を望んでいません。代わりに、現在の位置が必要です。私はデバイスが修正を得るのを待っていた、時にはGPSは通常よりも多くの時間が必要ですが、まだ改善はありません。私はその装置を使って約10キロも走った。 :-)
ここに私が使用したコードがあります。OnLocationChangedが呼び出されていません

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) {} 
} 

マニフェスト権限:

<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" /> 

を感謝し、 Biplab

+0

あなたの最後の質問の回答はどう受け入れますか? – user370305

+0

申し訳ありませんが、私はそれを知りませんでした。私は最後の質問のために受け入れの答えのチェックボタンをマークしました。答えをありがとう。 –

+0

あなたはそれをデバイスでチェックしていますか?そしてあなたはそれを外でテストしていますか? –

答えて

-1

はGPS room..becauseから外にそれを使用してみてください場所に応じindoor..dependingでは動作しません。..屋外で完璧に動作します。

+0

アプリケーションをテストするために、ほぼ10kmのエリアをカバーしました。それは仕事をしなかった。 –

+0

2012年4月現在では疑いがありますが、今は間違いなくHulk – ericn

+0

かもしれませんが、ApriL'12では問題でした。 – Hulk

0

@Biplab Kundu - setMockLocationメソッドでプロバイダをオーバーライドしていますか? もう一度その方法を確認してください。

+0

setMockLocationはオーバーライドされた関数ではありません。私は、引数として渡された緯度と経度ごとにマップ内のいくつかの場所を設定するよう書いています。 –

+0

@SandipJadhavあなたは 'LocationServices.FusedLocationApi'を意味しますか? –

+0

私はonLocationChangeListenerを実装しています –

関連する問題