Android - 在活动之间共享位置信息

时间:2011-09-15 19:50:31

标签: android location

在活动之间分享位置信息的最佳做法是什么? 例如:

  • Activity1(main)根据用户当前位置(lat& long)显示数据
  • Activity2会显示一个谷歌地图,其数据靠近用户的当前位置
  • Activity3显示靠近用户当前位置的日历事件

每个活动都会通过发送当前位置来调用特定的Web服务方法。

我问这个因为我很困惑:

  • 我应该创建Location对象的静态引用(获取主活动中的用户位置)并在其他活动中使用该对象。
  • 每个活动都有自己的实现来获取用户位置。

谢谢

2 个答案:

答案 0 :(得分:3)

如果您希望在导航活动时保持位置不变,请将其传递给起始意图,并让每个活动都保留数据的副本。

另一方面,如果您希望所有3位置都具有动态位置,我会考虑制作服务以收听位置服务。然后,您的活动可以绑定到该服务并接收更新。这可以确保您不会遇到多个侦听器,并且意外地使位置侦听器保持活动时间超过预期。它还为您提供了一个单独的位置来维护任何必要的设置(即用户选择退出,频率和精度等)。

答案 1 :(得分:0)

将信息从一个活动传递到另一个活动非常容易。当您创建用于启动其他活动的intent时,您可以将其他信息附加到新活动启动时可以访问的该intent。

以下是一个例子:

要将信息从一个活动传递到另一个活动,您可以执行以下操作:

Intent i = new Intent(this, OtherActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("variableName", "variable value");

然后在另一个活动中,您将执行以下操作

Bundle extras = this.getIntent().getExtras(); 
String var = null;

if (extras != null) {
    var = extras.getString("variableName");
}

你可以传递的不仅仅是字符串,整数等......你甚至可以传递对象。作为Parcelable类的子对象也可以传递。要将parcelable简单地添加到intent:

i.putExtra("variableName", instanceOfMyClass);

在新的活动中,您只需致电:

MyClass obj = (MyClass) extras.getParcelableExtra("parcelableName");