2013-08-27 82 views
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 
    } 
+0

您是否试过Fused Locations提供程序? –

回答

1

可以使用的LocationManager类的requestLocationUpdates方法 - http://developer.android.com/reference/android/location/LocationManager.html

您可以指定以毫秒计的时间间隔,也以米为单位的最小距离变化。

我的建议是按如下说明切换到最新的位置API:https://developer.android.com/google/play-services/location.html

+0

作为一个新人,花了我一段时间才弄明白这一点,但事实证明它并不是那么复杂。由于在保存我想要的新信息之前,我已经有了一个按钮,所以我只实现了这个方法并将LocationListener扩展到Activity。再次感谢。 –

0

与谷歌新推出了融合位置提供它得到的位置或获得定期更新要容易得多!请参阅此链接可能是非常有帮助的

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

所有你需要的是太导入谷歌播放服务到你的项目,

,你也可以使用一个后台服务得到定期更新。

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; 
} 

} 
+0

这对我来说最合乎逻辑。我如何将这个实现到上面的代码中?我会用这个班的某个电话来替换最后一个已知的好位置吗?我将如何检索lat/Lng? –

+0

http://hastebin.com/fomequyawe.avrasm,试试这个代码,由你的代码组成,如果有帮助,请接受答案! –

+0

感谢您的帮助,但我收到了您提供的代码的几处错误,尽管这对我创建解决方案有一定帮助。 –