Android共享活动之间的位置数据

时间:2016-04-08 10:09:15

标签: android service background gps location

我有一个带有两个活动A和B(谷歌地图)的应用程序,都需要定期接收GPS位置。我需要从活动A到B,然后应用程序继续检索GPS位置而不会中断。为了解决这个问题,我想了两个方法:

第一种是使用在应用程序启动时启动并连续检索GPS位置的服务,并以某种方式通知两个活动有关新数据,然后,当应用程序完成时停止检索位置。

第二种方法是使用片段,我只有一个连续检索GPS位置的活动,然后我有两个显示A和B内容的片段,并以某种方式使用从活动中收到的位置数据。

当我说“某种程度上”我想说我不知道​​如何: - )

您对如何实施这两种方法有什么建议,还是可以提出更好的方法?

1 个答案:

答案 0 :(得分:1)

#1每当位置发生变化时,发送意图并在您想要的地方接收

 LocalBroadcastManager mLocalBroadcastManager;

 @Override
 public void onLocationChanged(Location location) {
     Intent intent = new Intent();
     intent.putExtra("com.exmaple.sample", location);
     mLocalBroadcastManager.sendBroadcast(intent);
 }

#2每当位置发生变化时,发送意图并在任意位置接收(与1相同)

@Override
public void onLocationChanged(Location location) {
    Intent intent = new Intent();
    intent.putExtra("com.exmaple.sample", location);
    sendBroadcast(intent);
}

#3或者,只传递一次待处理的意图,然后接收位置

Intent intent = new Intent(mContext, YourBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 1, intent, 0);

mLocManager = (LocationManager)getSystemService(LOCATION_SERVICE);
mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, pendingIntent);

#4创建一个静态变量,然后定期从活动中轮询它。请注意,您应该优化轮询频率,因为它不能保证获得新的位置。这可能是糟糕的方法,但它可能值得你的方案

public static Location sLastLocation;

@Override
public void onLocationChanged(Location location) {
    sLastLocation = location;
}

#5使用事件总线link