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);
なぜこれが起こっているのか。ありがとう。