0

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

提前致谢

4

3 回答 3

0

从您的服务中,您可以将经纬度发送到 MapActivity。您可以通过将 lap/longs 放入 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);
}
于 2013-01-21T09:20:27.600 回答
0

我们需要使用 locationManager 和 LocationUpdates 作为

locationManager.requestLocationUpdates(provider, 400, 1, this);

我们可以根据需要设置代表距离和时间的参数。稍后我们应该定义一个函数为

public void onLocationChanged(Location location)
{
}

更多信息请点击这里

于 2013-01-21T09:40:08.903 回答
0

当用户位置在您的位置监听器中更新时发送广播。并更新地图中的位置。在广播意图中,您还可以传递更新的位置。

于 2013-01-20T14:13:33.200 回答