0

アプリで位置情報サービスを使用しています。経度と緯度を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();
    }
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 に答える