2011-06-21 133 views
2

我正在开发基于谷歌地图的应用程序,用户必须在地图中显示当前位置。我有谷歌它,并找到解决方案,但是当我运行的代码它不显示当前的位置,而是它显示谷歌地图单独。我的代码是低于如何在Android中通过GPS获取当前位置

public class GPSLocation extends MapActivity { 
private MapView mapView; 
private MapController mapController; 
private LocationManager locationManager; 
private GPSLocationListener locationListener; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // mapView = (MapView) findViewById(R.id.mapView); 

    // enable Street view by default 
    // mapView.setStreetView(true); 

    // enable to show Satellite view 
    // mapView.setSatellite(true); 

    // enable to show Traffic on map 
    // mapView.setTraffic(true); 

    // mapView.setBuiltInZoomControls(true); 

    // mapController = mapView.getController(); 
    // mapController.setZoom(16); 




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

    locationListener = new GPSLocationListener(); 

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


} 
private class GPSLocationListener implements LocationListener 
{ 
    public GPSLocationListener() { 
     // TODO Auto-generated constructor stub 
    } 
    @Override 
    public void onLocationChanged(Location location) { 
    if (location != null) { 
     System.out.println("onLocationChanged"); 
      GeoPoint point = new GeoPoint(
        (int) (location.getLatitude() * 1E6), 
        (int) (location.getLongitude() * 1E6)); 


     Toast.makeText(getBaseContext(), 
      "Latitude: " + location.getLatitude() + 
      " Longitude: " + location.getLongitude(), 
      Toast.LENGTH_SHORT).show(); 

     mapController.animateTo(point); 
     mapController.setZoom(16); 
     mapView.invalidate(); 
    } 
    else 
    { 
     System.out.println("OnLocationChanged value is null"); 
    } 
    } 



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

} 


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

} 


@Override 
public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
    // TODO Auto-generated method stub 

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





} 

我不知道我犯了什么错误。它甚至没有进入GPSLocationListener类。请帮助我.. 在此先感谢。

+0

谢谢我从你的代码中得到了很多帮助。 :) –

回答

1

检查是您的GPS活跃。更改最短距离和最短时间。例如:

requestLocationUpdates(LocationManager.GPS_PROVIDER,10,30,locationListener);
+0

我已经尝试过,但它再次显示只有地图不是当前位置。 – deepa

+0

我正在获取当前位置.. –

0

你正在一个设备或模拟器上测试吗?因为在模拟器上你必须手动输入坐标。

此外,确保follwing的一个是在你的manifest文件:

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

我只在模拟器中检查。如果我给出了坐标,它必须运行GPSLocationListener中的代码,但它甚至不会进入该类,那么它的可能性如何?是的,我已经在清单文件中给出了许可 – deepa

+0

在eclipse中,点击顶部工具栏中的'窗口',然后'显示视图',并查找'模拟器控制',如果它不在该列表中,点击'其他'并从那里选择它。然后,在出现的视图中滚动到它所说的“位置控件”的底部并更改其中的坐标,然后按'发送'。 – JDx

+0

我已将模拟器控制lang中的坐标更改为9 58'并且长度为78 10'作为当前位置,但它只是再次显示地图而不是特定位置。并没有进入GPSLocationListener类.. – deepa

0

请添加下面这行代码。它为我工作。

LocationManager.requestLocationUpdates(LocationManager.NETWORk_PROVIDER,0,0,locationListener); 

如果它仍然不起作用可以请给出日志详细信息?

+0

@dukeling ..感谢您的编辑.. –

0

最近Google Maps V2可让您执行OnMyLocationChangeListener,因此您无需实施(并设置)自定义的LocationSource。