2011-11-10 34 views
1

我已经构建了一个广播接收器,当其他应用程序获得位置时,我想要接收意图。对我来说清楚这是我的应用程序没有运行时我可以接收位置更新。当我收到位置时,我开始一个intentService来更新我的db。如何接收位置的内容

但是我不确定在清单中使用哪个意图过滤器?

是否有我可以使用什么意图过滤器的列表?

+0

您可以使用的意图过滤器列表在这里http://developer.android.com/reference/android/content/Intent.html#constants – Craigy

回答

0

你可以做的一件事是使用LocationManager requestLocationUpdates() method with a pending intent argument。如果您使用的是API版本8或更高版本,则您要使用的位置提供程序是PASSIVE_PROVIDER,以便只有在其他活动更新它们时才会获取更新。

在这种情况下,您不必使用BroadcastReceiver,因为只要位置发生变化就会调用PendingIntent。

总结起来,这是你如何能实现这个

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    Intent intent = new Intent(this, PassiveLocationActivity.class); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      intent, 0); 

    locationManager.requestLocationUpdates(
      LocationManager.PASSIVE_PROVIDER, 1000, 10.0f, pendingIntent); 

,并确保您的许可添加到您的清单

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

警告:做这种事情是非常对电池征税。请确保您为minTimeminDistance设置理智值,并在不再需要更新时致电locationManager.removeUpdates(pendingIntent);

+0

我想在我的应用程序关闭时收到更新。所以这就是我使用广播接收器的原因。所以我无法动态地注册被动提供者。这样我就不会使用任何额外的电池,因为当其他应用程序获得它时,我将只接收该位置。我已将问题更新为更清晰 – jiduvah

+0

我不知道有关位置更新的BroadcastReceiver。这可能是故意的,因为它意味着很多开销,因为位置可能变化非常迅速。即使使用接收器,如果每次在任何位置更新位置时都要执行某些操作,您仍然会使用更多资源。即使您的应用程序未运行,您为什么还需要位置更新? – Craigy

+0

是的,我倒出来了。接受的意图是在代码中定义的。我其实在看这个帖子。 http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html 它解释了为什么你可能会使用这种方法。在我的情况下,它不会使用任何额外的资源appart从更改SQLite数据库中的最多20个条目。 – jiduvah