1

GPS を使用して 2 分ごとに人の位置を特定するプログラムがあります。そのためのコードは次のとおりです。

private boolean flagLocalizacion = false;
private LocationListener locationListener;
private Location ultimaLocalizacion;
private LocationManager locationManager;  

@Override
public void onCreate(Bundle savedInstanceState) {
    locationListener = new LocationListener() { 
        public void onLocationChanged(Location location) {
            if (location!=null) {
                if(ultimaLocalizacion == null && flagLocalizacion) {
                    ultimaLocalizacion = location;
                    Toast.makeText(getApplicationContext(), "Longitude: " + location.getLongitude() + "Latitude: " + location.getLatitude(), Toast.LENGTH_SHORT).show();
                } else if ((ultimaLocalizacion.getLatitude() != location.getLatitude()
                            || ultimaLocalizacion.getLongitude() != location.getLongitude()) && flagLocalizacion) {
                    ultimaLocalizacion = location;
                    Toast.makeText(getApplicationContext(), "Longitude: " + location.getLongitude() + "Latitude: "  + location.getLatitude(), Toast.LENGTH_SHORT).show();
                }                   
            }
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {
            System.out.println("gps");
        }
        public void onProviderDisabled(String provider) {
            System.out.println("No gps");
        }
    };                                                                   Button botonComenzar = (Button) findViewById(R.id.bComenzar);
    botonComenzar.setOnClickListener(new OnClickListener() {
        @SuppressWarnings("static-access")
        public void onClick(View v) {
            LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, 12000, 30, locationListener);
            Toast.makeText(getApplicationContext(), "Activada Localizacion", Toast.LENGTH_SHORT).show();
            flagLocalizacion = true;    
        }
    });

私の問題は次のとおりです。

このアプリケーションはバージョン 2.2 で正しく動作します。しかし、2.3.5 を搭載した電話にソフトウェアをインストールすると、ソフトウェアが失敗しました。失敗は、2 分ごとではなく、そのロケールが継続的に発生することです。なぜそれが起こっているのかについて考えはありますか?

ありがとうございます。

4

1 に答える 1

0

要求されたminTimeに関係なく、継続的なGPS更新(つまり、GPS更新の間隔が1秒)は、JellyBeanより前の多くのAndroid携帯電話で既知の問題です。

Androidチームとのこの問題の完全な議論はここにあります:

https://android-review.googlesource.com/#/c/34230/

新しいCTSVerifierテストがAndroid4.1JellyBeanに追加されました。これにより、JellyBean以降でこれが発生するのを防ぐことができます。

これの影響を受けるJellyBeanより前のデバイスの場合、回避策の唯一のオプションは、GPSを更新する時間間隔でLocationListenerを手動で登録解除し、再登録することです。

于 2012-09-24T20:34:15.613 に答える