我已经构建了一个广播接收器,当其他应用程序获得位置时,我想要接收意图。对我来说清楚这是我的应用程序没有运行时我可以接收位置更新。当我收到位置时,我开始一个intentService来更新我的db。如何接收位置的内容
但是我不确定在清单中使用哪个意图过滤器?
是否有我可以使用什么意图过滤器的列表?
我已经构建了一个广播接收器,当其他应用程序获得位置时,我想要接收意图。对我来说清楚这是我的应用程序没有运行时我可以接收位置更新。当我收到位置时,我开始一个intentService来更新我的db。如何接收位置的内容
但是我不确定在清单中使用哪个意图过滤器?
是否有我可以使用什么意图过滤器的列表?
你可以做的一件事是使用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" />
警告:做这种事情是非常对电池征税。请确保您为minTime
和minDistance
设置理智值,并在不再需要更新时致电locationManager.removeUpdates(pendingIntent);
。
我想在我的应用程序关闭时收到更新。所以这就是我使用广播接收器的原因。所以我无法动态地注册被动提供者。这样我就不会使用任何额外的电池,因为当其他应用程序获得它时,我将只接收该位置。我已将问题更新为更清晰 – jiduvah
我不知道有关位置更新的BroadcastReceiver。这可能是故意的,因为它意味着很多开销,因为位置可能变化非常迅速。即使使用接收器,如果每次在任何位置更新位置时都要执行某些操作,您仍然会使用更多资源。即使您的应用程序未运行,您为什么还需要位置更新? – Craigy
是的,我倒出来了。接受的意图是在代码中定义的。我其实在看这个帖子。 http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html 它解释了为什么你可能会使用这种方法。在我的情况下,它不会使用任何额外的资源appart从更改SQLite数据库中的最多20个条目。 – jiduvah
您可以使用的意图过滤器列表在这里http://developer.android.com/reference/android/content/Intent.html#constants – Craigy