0

30秒ごとに現在地を使用するアプリを開発しました。アプリは終了しました。ICS (Android 4)、JellyBean(Android 4.1) デバイスで完全に動作しますが、Android 2.3 または Android 2.2 でアプリを実行すると、アプリの GPS は 2/3 秒ごとに更新され、常に更新されます。私のコードは 30 秒間実行され、Android 4,4.1 では完全に (30 秒後) 動作しますが、Android 2.3 または 2.2 では動作しません。

私はコードを共有しています....

 public class GPSManager
{
    //private static final int gpsMinTime = 60000;
    //private static final int gpsMinDistance = 0;

    private long gpsMinTime = 0;
    private float gpsMinDistance = 0;

    private static LocationManager locationManager = null;
    private static LocationListener locationListener = null;
    private static GPSCallback gpsCallback = null;

    public GPSManager(long gpsMinTime,float gpsMinDistance)
    {   
        this.gpsMinTime = gpsMinTime;
        this.gpsMinDistance = gpsMinDistance;

        GPSManager.locationListener = new LocationListener()
        {
            @Override
            public void onLocationChanged(final Location location)
            {
                if (GPSManager.gpsCallback != null)
                {
                    GPSManager.gpsCallback.onGPSUpdate(location);
                }
            }

            @Override
            public void onProviderDisabled(final String provider)
            {

            }

            @Override
            public void onProviderEnabled(final String provider)
            {

            }

            @Override
            public void onStatusChanged(final String provider, final int status, final Bundle extras)
            {

            }
        };
    }

    public GPSCallback getGPSCallback()
    {
        return GPSManager.gpsCallback;
    }

    public void setGPSCallback(final GPSCallback gpsCallback)
    {
        GPSManager.gpsCallback = gpsCallback;
    }

    public void startListening(final Context context)
    {
        if (GPSManager.locationManager == null)
        {
            GPSManager.locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        }

        final Criteria criteria = new Criteria();

        criteria.setAccuracy(Criteria.ACCURACY_MEDIUM);  // accuracy_midium
        criteria.setSpeedRequired(true);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(true);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_MEDIUM);

        final String bestProvider = GPSManager.locationManager.getBestProvider(criteria, true);

        if (bestProvider != null && bestProvider.length() > 0)
        {
            GPSManager.locationManager.requestLocationUpdates(bestProvider, this.gpsMinTime,
                    this.gpsMinDistance, GPSManager.locationListener);

        }
        else
        {
            final List<String> providers = GPSManager.locationManager.getProviders(true);

            for (final String provider : providers)
            {
                GPSManager.locationManager.requestLocationUpdates(provider, this.gpsMinTime,
                        this.gpsMinDistance, GPSManager.locationListener);
            }
        }
    }

    public void stopListening()
    {
        try
        {
            if (GPSManager.locationManager != null && GPSManager.locationListener != null)
            {
                GPSManager.locationManager.removeUpdates(GPSManager.locationListener);
            }

            GPSManager.locationManager = null;
        }
        catch (final Exception ex)
        {

        }
    }


}

私の場所の更新コードは次のとおりです。

private static final long GPS_MINTIME = 30000;
private static final float GPS_MINDISTANCE = 100;
gpsManager = new GPSManager(GPS_MINTIME,GPS_MINDISTANCE);
                gpsManager.startListening(getApplicationContext());
                gpsManager.setGPSCallback(this);

なぜこれが起こっているのか。ありがとう。

4

3 に答える 3

0

私のコメントに加えて、それは既知です(ただし、広く報告されているバグ/機能ではありません)。Google グループの投稿を参照してください。 私はこの提案に私の支持を追加しましたが、4.1 で修正されたため、スレッドは閉じられました。

于 2013-02-28T19:47:00.547 に答える
0

GPS_MINTIME以上を変更すると、6000
完全に機能します。

于 2013-02-28T19:15:45.163 に答える
0

SO https://stackoverflow.com/a/4245527/1438915でこの回答を確認してください

API < 4.0 分では、時間は強制的に考慮されないため、不正確な場合があります。ヒントのように機能します。

アップデート

docs INFOから、これを読むべきだと思います。

于 2013-02-28T19:20:37.853 に答える