0

サービス開始:

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent(this, LocationService.class);
pi = PendingIntent.getService(this, 0, i,
        PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pi);
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime(), 30*1000, pi);

サービス:

public class LocationService extends Service implements LocationListener {

    public static double curLat = 0.0;
    public static double curLng = 0.0;
    private LocationManager mgr;
    private String best;
    private Location location;

    @Override
    public IBinder onBind(Intent arg0) {

        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
        best = LocationManager.NETWORK_PROVIDER;
        location = mgr.getLastKnownLocation(best);
        if (location != null) {

            dumpLocation(location);
            mgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
                    5 * 1000, 0, this);
        }
        return START_NOT_STICKY;
        }
    }

    private void dumpLocation(Location l) {

        SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy:hh:mm:ss",
                Locale.ENGLISH);
        String format = s.format(l.getTime());
        //The above time is always 21/03/2013:09:53:41 which is more than a week old
        curLat = l.getLatitude();
        curLng = l.getLongitude();
    }

    @Override
    public void onLocationChanged(Location location) {

        //This never seems to be called
        dumpLocation(location);
    }

    @Override
    public void onProviderDisabled(String provider) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

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

    }
}

30 秒ごとにサービスが呼び出されますが、requestLocationUpdates決して呼び出されないようonLocationChangedです。そして、lastKnownLocationその1週間前の時間を確認したとき。

フォースクエア、ローカル、マップなどのアプリケーションは、GPS を無効にした現在の位置を示します。

私は何が欠けていますか?

4

1 に答える 1

1

onLocationChange は場所が変更された場合にのみ呼び出されるため、デバイスを持ってどこかから移動する必要があると思います。また、ネットワークの場所はおおよそ 1000 ~ 2000 メートル近くだったので、場所が変更された通りを確認し、新しい場所を取得する必要があります。GPSを使用した場合、正確になりますが、すべてを修正した後、20〜30メートル近くになります。

于 2013-03-29T07:12:18.150 に答える