2012-08-10 107 views
0

我必须加载当前设备MapActivity启动时的位置(以从另一个Activity启动的Intent开始)。
问题是,环顾网络和android开发人员部分我看到我必须使用LocationListener方法onLocationChange(location),但我必须在MapActivity启动时获取用户位置,而不是在用户更改他位置。我尝试过很多方法,但我找不到解决方案。如何在MapActivity启动时通过GPS或WiFi获取当前位置

public class MappaActivity extends MapActivity { 

MapView miaMapView; 
MapController mc; 
LocationManager lm; 
GeoPoint actualP; 
LocationListener locationListener; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_mappa_activity); 

    miaMapView=(MapView)findViewById(R.id.miaMapView); 
    mc=miaMapView.getController(); 
    miaMapView.setBuiltInZoomControls(true); 
    miaMapView.setSatellite(true); 
    miaMapView.invalidate(); 

    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    locationListener=new MyLocationListener(); 

    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 


// This is MyLocationListener inner class: 



private class MyLocationListener implements LocationListener{ 

    @Override 
    public void onLocationChanged(Location location) { 
     if(location!=null){ 

      actualP = new 
        GeoPoint(
        (int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6)); 

      mc.animateTo(actualP); 
      mc.setZoom(10); 
     } 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

} 

} 

actualP保持为空,将不会触发onLocationChanged方法,直到用户位置有所改变。

我也尝试了locationManager.getLastKnowLocation(location.GPS_PROVIDER),但它返回null。

我希望能找到一些帮助,谢谢!

+0

你是通过模拟器还是实际设备运行它?这听起来可能很愚蠢......但是如果你正在使用一个设备......你是否已经走出去让它获得一个好的GPS信号? – RyanInBinary 2012-08-10 13:47:33

+0

您是否在Android清单中添加权限? <使用权限android:name =“android.permission.ACCESS_COARSE_LOCATION”/> <使用权限android:name =“android.permission.ACCESS_FINE_LOCATION”> – 2012-08-10 13:50:54

+0

是的,我添加了权限,是的,我试着走出去获取GPS信号 – TheModularMind 2012-08-10 13:56:05

回答

0

这可能是可能是您的GPS_PROVIDER无法获取位置

这将是更好,如果你也使用NETWORK_PROVIDER和PASSIVE_PROVIDER用于获取位置,当你GPS_PROVIDER无法给你的位置

也使用lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);

and lm.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER,0,0,locationListener);可能它们并不像GPS_PROVIDER那么精确。

相关问题