Проблема в MapActivity - PullRequest
       3

Проблема в MapActivity

0 голосов
/ 22 июня 2011

Я тестирую приложение, использующее API Google Maps. Мое приложение работает, но моя проблема:

Я хочу, чтобы gps обнаружил мое местоположение и представил его. Если мой gps включен, ему требуется несколько секунд, чтобы найти мое местоположение. В эти секунды мое приложение запускается и использует значения по умолчанию long и lat..Как я могу добавить что-то вроде индикатора прогресса, пока мое местоположение не найдено? спасибо

это часть моего кода:

  private double locationLat=37.979116; 
        private double locationLon=23.717766;
     MapView mapView; 
        MapController mc;
        GeoPoint p;
    //..........
    //in the onCreate

        LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            LocationListener mlocListener = new MyLocationListener();
            mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER,0,0, mlocListener);

            MapView mapView = (MapView) findViewById(R.id.mapview);
            mapView.setBuiltInZoomControls(true);
            // mapView.setSatellite(true);
            // mapView.setStreetView(true);



            mc = mapView.getController();

           String lata = String.valueOf(locationLat);
            String lnga = String.valueOf(locationLon);

           String coordinates[] = {lata, lnga};
            double lat = Double.parseDouble(coordinates[0]);
            double lng = Double.parseDouble(coordinates[1]);

            p = new GeoPoint(
                (int) (lat * 1E6), 
                (int) (lng * 1E6));

            mc.animateTo(p);
            mc.setZoom(17); 

          //---Add a location marker---
            MapOverlay mapOverlay = new MapOverlay();
            List<Overlay> listOfOverlays = mapView.getOverlays();
            listOfOverlays.clear();
            listOfOverlays.add(mapOverlay);        

            mapView.invalidate();

    //out of onCreate


     class MapOverlay extends com.google.android.maps.Overlay
            {
                @Override
                public boolean draw(Canvas canvas, MapView mapView, 
                boolean shadow, long when) 
                {
                    super.draw(canvas, mapView, shadow);                   

                    //---translate the GeoPoint to screen pixels---
                    Point screenPts = new Point();
                    mapView.getProjection().toPixels(p, screenPts);

                    //---add the marker---
                    Bitmap bmp = BitmapFactory.decodeResource(
                        getResources(), R.drawable.avatar);            
                    canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);         
                    return true;
                }

                @Override
                public boolean onTouchEvent(MotionEvent event, MapView mapView) 
                {   
                    //---when user lifts his finger---
                    if (event.getAction() == 1) {                
                        GeoPoint p = mapView.getProjection().fromPixels(
                            (int) event.getX(),
                            (int) event.getY());

                        Geocoder geoCoder = new Geocoder(
                            getBaseContext(), Locale.getDefault());
                        try {
                            List<Address> addresses = geoCoder.getFromLocation(
                                p.getLatitudeE6()  / 1E6, 
                                p.getLongitudeE6() / 1E6, 1);

                            String add = "";
                            if (addresses.size() > 0) 
                            {
                                for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); 
                                     i++)
                                   add += addresses.get(0).getAddressLine(i) + "\n";
                            }

                            Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
                        }
                        catch (IOException e) {                
                            e.printStackTrace();
                        }   
                        return true;
                    }
                    else                
                        return false;
                }        

            } 

        @Override
        protected boolean isRouteDisplayed() {
            return false;
        }
        /* Class My Location Listener */

        public class MyLocationListener implements LocationListener

        {



        public void onLocationChanged(Location loc)

        {

        loc.getLatitude();

        loc.getLongitude();

        //String Text = "My current location is: " +

        //"Latitud = " + loc.getLatitude() +

        //"Longitud = " + loc.getLongitude();

    locationLat=loc.getLatitude();
    locationLon=loc.getLongitude();
    //  Toast.makeText( getApplicationContext(),
    //
    //  Text,
    //
    //  Toast.LENGTH_SHORT).show();

        }




        public void onProviderDisabled(String provider)

        {

        Toast.makeText( getApplicationContext(),

        "Gps Disabled",

        Toast.LENGTH_SHORT ).show();

        }




        public void onProviderEnabled(String provider)

        {

        Toast.makeText( getApplicationContext(),

        "Gps Enabled",

        Toast.LENGTH_SHORT).show();

        }


        public void onStatusChanged(String provider, int status, Bundle extras)

        {


        }



        }/* End of Class MyLocationListener */


        }/* End of Activity */

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Я бы просто поместил его в ASyncTask, а затем открыл диалоговое окно, в котором говорилось, что поиск вашего местоположения ... как только найден, закрывается диалоговое окно ... Примеры Google ASyncTask ..., которое должно вам помочь.

0 голосов
/ 22 июня 2011

^^ Согласен с этим, не уверен, что вы просто обновляете оверлей или вызываете свой контроллер карты, чтобы следить за обновлением широты и долготы, но эту идею вы можете использовать.

Также, пожалуйста, прочитайтедокументация «requestLocationUpdates» 0,0 уничтожит батарею реального телефона.это обновляет местоположение каждые 0 миллисекунд и / или 0 футов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...