MapView MyLocationOverlay首次运行问题

时间:2012-08-16 08:30:23

标签: android android-mapview android-maps android-location

我在我的应用中使用位置服务。如果我通过DDMS将经度和纬度发送到模拟器,蓝点会动画到那里。但如果我关闭应用程序并重新启动,蓝点似乎不会。如果你看到蓝点,你必须发送新的经度和纬度。 我希望每次应用开始时都显示蓝点。

我该怎么办?

的onCreate:

mc = mapView.getController();
        mapView.setBuiltInZoomControls(true);
        mc.setZoom(15);
        myLocOverlay = new MyLocationOverlay(this, mapView);
        mapView.getOverlays().add(myLocOverlay); 
        myLocOverlay.runOnFirstFix(new Runnable() {
            public void run() {
                mc.animateTo(myLocOverlay.getMyLocation());
                }
        });

        mapView.postInvalidate();

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();       
        provider = lm.getBestProvider(criteria, false);

        Location location = lm.getLastKnownLocation(provider);

        if (location != null) {
            onLocationChanged(location);
            }

onLocationChanged(位置位置)

String PK="";

        double lat = location.getLatitude();
        double lng = location.getLongitude();
        Geocoder gc = new Geocoder(this,Locale.getDefault());
        try{

            List<Address> adresler = gc.getFromLocation(lat, lng, 1);
            StringBuilder sb = new StringBuilder();
            if(adresler.size()>0){
                Address adres = adresler.get(0);
                boolean sayi = false;
                for(int i=0;i<adres.getMaxAddressLineIndex();i++){
                    if(i!=2){
                        sb.append(adres.getAddressLine(i)).append("\n");
                    }
                    else{
                        String full = adres.getAddressLine(i).toString();
                        char chars[] = full.toCharArray();
                        for(int k=0;k<chars.length;k++){
                            sayi = Character.isDigit(chars[k]);
                            if(sayi){
                                PK=PK+chars[k];
                            }
                        }
                    }

                }   
                adresString = sb.toString();
                new gpsYerBilgisiAS(PK).execute();
            }
        }
            catch(IOException e){

            }
        }

onResume和onPause

@Override   
    protected void onResume() {  
        super.onResume();  
        lm.requestLocationUpdates(provider, 400, 1, this);      
        myLocOverlay.enableMyLocation();

    }
    @Override   
    protected void onPause() {    
        super.onPause();
        lm.removeUpdates(this); 
        myLocOverlay.disableMyLocation();
    }

2 个答案:

答案 0 :(得分:1)

让你的onResume()像这样:

protected void onResume() {
    ....
    myLocOverlay = new MyLocationOverlay(this, mapView);
    myLocOverlay.enableMyLocation();
    mapView.getOverlays().add(myLocOverlay); 
    myLocOverlay.runOnFirstFix(new Runnable() {
        public void run() {
            mc.animateTo(myLocOverlay.getMyLocation());
            }
    });
    ....
}

它会以你想要的方式工作。这就是我在自己的应用程序中拥有它的方式。

答案 1 :(得分:1)

在模拟器中,每次要调用onLocationChanged方法时都必须发送位置。 在设备上,如果GPS打开,它会自动完成。但是,当您的设备通过GPS或网络接收位置数据时,我只会显示“蓝点”。