фон проблемы :
Я немного новичок в разработке Android. Все, что я сейчас пытаюсь сделать, - это получить координаты GPS с устройства GPS телефона и отобразить их на Картах Google или просто в TextView
, или как угодно. Основная задача - получить их.
Я прочитал несколько уроков. Я использую
- Android 2.3.3
- Уровень API 10
- Затмение 3.6.1
- Windows 7
Описание проблемы :
Я написал класс GeoUpdateHandler
, который реализует LocationListener
и реализует его методы onLocationChange()
и т. Д. И в MyMapsActivity
я использую обычный requestLocationUpdates
LocationManager
для получения периодических обновлений.
Когда я запускаю приложение, я отправляю GPS-координаты из элемента управления эмулятора Eclipse («Окно» -> «Показать представление» -> «Другое» -> Android -> «Управление эмулятором») для отправки долготы и широты. Как только эмулируемое устройство получает координаты, приложение зависает. Ничего не происходит, и курсор меняется на синий круг (что означает мышление / застрял), и ничего не происходит. Если я использую locationManager.getLastKnownLocation(String provider)
, он становится нулевым. Очевидно, потому что нет последнего известного местоположения. Это застревает, прежде чем знать один!
Я также пытался отправить координаты через telnet. (cmd -> telnet localhost 5554 -> geo fix. Но происходит то же самое.
Я попытался запустить устройство независимо от приложения, отправить координаты, а затем запустить приложение. Но то же самое происходит, когда я запускаю приложение: оно зависает.
Следующий код HelloItemizedOverlay
взят из учебника Android MapView и прекрасно работает с заданными вручную координатами. Проблема возникает, когда пытаются определить местоположение GPS.
public class MyMapsActivity extends MapActivity
{
private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
LinearLayout linLayout;
MapView mView;
List<Overlay> mapOverlays;
Drawable drawable;
HelloItemizedOverlay itemizedOverlay;
GeoUpdateHandler handler;
Location location;
public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
setContentView(R.layout.main); // bind the layout to the activity
mView = (MapView) findViewById(R.id.mapview);
mView.setBuiltInZoomControls(true);
mapOverlays = mView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.icon);
itemizedOverlay = new HelloItemizedOverlay(drawable);
mapController = mView.getController();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
handler = new GeoUpdateHandler();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, handler);
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
GeoPoint point = new GeoPoint((int)location.getLongitude(),(int)location.getLatitude());
OverlayItem overlayitem = new OverlayItem(point, "", "");
mView.setBuiltInZoomControls(true);
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
mapController.setZoom(8);
mapController.animateTo(point);
}
@Override
protected boolean isRouteDisplayed()
{
return false;
}
public class GeoUpdateHandler implements LocationListener
{
@Override
public void onLocationChanged(Location location)
{
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
GeoPoint point = new GeoPoint(lat, lng);
mapController.animateTo(point); // mapController.setCenter(point);
}
@Override
public void onProviderDisabled(String provider)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
@Override
protected void onResume()
{
handler = new GeoUpdateHandler();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, handler);
super.onResume();
}
}