我有mapActivity,我注册我的MapView小部件,我正在运行检查后台位置数据的服务。我正在通过BroadcastReceiver开始我的mapactivity服务,就像这样
public class MainActivity extends MapActivity {
private MapView view;
protected void onCreate(Bundle savedInstanceState) {
view = (MapView) findViewById(R.id.themap);
view.setBuiltInZoomControls(true);
Intent in = new Intent();
MyReceiver locationRecvr = new MyReceiver();
locationRecvr.onReceive(getApplicationContext(), in);
}
......................
}
myReveiver.java
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "MyReceiver Started..",Toast.LENGTH_SHORT).show();
Log.v("Debug", "MyReceiver Started..");
Intent myIntent=new Intent(context, ServiceLocation.class);
context.startService(myIntent);
}
}
和myservice和LocationListener一样
public class ServiceLocation extends Service implements LocationListener {
......
.....
....
}
我的问题是当位置被更改时如何在mapview上更改该位置如何在onLocationchanged()方法中获取mapview引用或如何将经度和经度发送到mapActivity。
提前致谢
答案 0 :(得分:0)
在您的位置监听器中更新用户位置时发送广播。 并更新地图中的位置。 在广播意图中,您还可以传递更新的位置。
答案 1 :(得分:0)
您可以从服务中将Lat / Long发送到MapActivity。 您可以通过在Intent Extra中放入一圈/多头来启动MapActivity。
在MapActivity中 -
/**
* Setting Google Map to provided location
*/
private void setMaptoProvidedLocation() {
Intent intent = getIntent();
LAT = intent.getIntExtra(DisplayActivity.LAT, DisplayActivity.DEF_LAT);
LNG = intent.getIntExtra(DisplayActivity.LNG, DisplayActivity.DEF_LNG);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mapController = mapView.getController();
mapController.setZoom(ZOOM_LEVEL - ZOOM_LEVEL / 2);
GeoPoint vehicleLocation = new GeoPoint(LAT, LNG);
mapController.animateTo(vehicleLocation);
// You can also add map overlays ...
}
//If MapDisplayActivity is in forground and we want to update the new location
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
Log.d("MapActivity","Got new Data again");
setMaptoProvidedLocation(false);
}
答案 2 :(得分:0)
我们需要将locationManager和LocationUpdates用作
locationManager.requestLocationUpdates(provider, 400, 1, this);
我们可以根据需要设置参数,代表距离和时间。 然后我们应该将函数定义为
public void onLocationChanged(Location location)
{
}
了解更多信息click here