0

これは、Google マップ上のマーカーとして最後に確認された適切な場所を表示するために必要な現在のコードです。すべて機能していますが、間隔 (たとえば 1 分または 5 分) で場所を更新したいと思います。現在使用しているコードを考えると、これを実装する最良の方法は何ですか?

import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class Parking extends Activity implements OnClickListener {

    private GoogleMap map;

    Button b;

    public static final String LATITUDE = "latitude";
    public static final String LONGITUDE = "longitude";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.parking);

        b = (Button)findViewById(R.id.button1);
        b.setOnClickListener(this);

        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

        if (map!=null)
        {       

        //Set Map Type
        map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

        //Enable MyLocation Layer of Google Map
        map.setMyLocationEnabled(true);

        //Get LocationManager object from System Service LOCATION_SERVICE
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        //Create a criteria object to retrieve provider
        Criteria criteria = new Criteria();

        //Get the best provider
        String provider = locationManager.getBestProvider(criteria, true);

        //Get Current Location
        Location myLocation = locationManager.getLastKnownLocation(provider);

        //Get Lat/Long of the current location
        double latitude = myLocation.getLatitude();
        double longitude = myLocation.getLongitude();

        //Create a latLng object for the current location
        LatLng latLng = new LatLng(latitude, longitude);

        //Show the current location in Google Map
        map.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        //Zoom to location
        map.animateCamera(CameraUpdateFactory.zoomTo(16));

        //Add marker
        map.addMarker(new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .title("You Are Here")
        );




        }//end if map !null
    }
4

2 に答える 2

1

LocationManager クラスの requestLocationUpdates メソッドを使用できます - http://developer.android.com/reference/android/location/LocationManager.html

時間間隔をミリ単位で指定し、最小距離の変化をメートル単位で指定することもできます。

ここで説明されているように、最新の Location API に切り替えることをお勧めします: https://developer.android.com/google/play-services/location.html

于 2013-08-27T20:30:11.457 に答える
0

新たに導入された Google の Fused Location Providers を使用すると、場所の取得や定期的な更新の取得がはるかに簡単になります。非常に役立つかもしれないこのリンクを参照してください

https://developer.android.com/training/location/receive-location-updates.html

必要なのは、Google Play サービスをプロジェクトにインポートすることだけです。

また、定期的な更新を取得するためにバックグラウンド サービスを使用することもできます。

public class UpdateLocation extends Service
        implements
            GooglePlayServicesClient.ConnectionCallbacks,
            GooglePlayServicesClient.OnConnectionFailedListener,
            LocationListener {

private static final long UPDATE_INTERVAL = 300000;
private static final int FASTEST_INTERVAL = 60000;
private LocationRequest lr;
private LocationClient lc;
private Location l;

@Override
public void onCreate() {
    super.onCreate();
    lr = LocationRequest.create();
    lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    lr.setInterval(UPDATE_INTERVAL);
    lr.setFastestInterval(FASTEST_INTERVAL);
    lc = new LocationClient(this, this, this);
}


@Override
public void onStart(Intent intent, int startId) {
    lc.connect();

}

@Override
public void onLocationChanged(Location l) {
 //do updates on Location change.
}

@Override
public void onConnectionFailed(ConnectionResult arg0) {

}

@Override
public void onConnected(Bundle arg0) {
    Log.d("AutoTracker : Test", "Location Client Connected");
    if (updates) {
        lc.requestLocationUpdates(lr, this);
    }

}

@Override
public void onDestroy() {
    if (lc.isConnected()) {
        lc.removeLocationUpdates(this);
    }
    lc.disconnect();
}

@Override
public void onDisconnected() {
}

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

}
于 2013-08-27T20:31:42.477 に答える