0

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

我能做些什么 ?

创建:

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();
    }
4

2 回答 2

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());
            }
    });
    ....
}

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

于 2012-08-16T08:45:13.030 回答
1

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

于 2012-08-16T09:22:18.403 回答