更新mapview上的当前位置,但locatinListenor正在服务中

时间:2013-01-20 14:09:30

标签: android locationlistener

我有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。

提前致谢

3 个答案:

答案 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