我想要做的是:服务,持续监听gps(是的: JUST gps)位置更新,而不主动请求它们 - 即这个应用程序不应该消耗额外的资源电池寿命或CPU时间,直到其他应用程序请求/接收GPS位置更新。那么我的应用程序应该执行一些功能。在此之后,它应该回到“睡眠”,等待下一个gps位置修复被其他应用程序请求...
我已经阅读了这篇文章http://android-developers.blogspot.de/2011/06/deep-dive-into-location.html,但这似乎有不同的侧重点。实际上,我在这里有点迷失......如何使用这个被动位置提供商呢?我无法让它发挥作用。
到目前为止我的代码:我有这个(远程)服务注册位置监听器:
public class MyService extends Service
{
LocationManager locationManager;
@Override
public IBinder onBind(Intent intent)
{
return serviceBinder;
}
private final IMyService.Stub serviceBinder = new IMyService.Stub()
{};
@Override
public void onCreate()
{
super.onCreate();
Log.d(Config.LOGTAG, "service started");
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, new GPSLocationListener());
}
@Override
public void onDestroy()
{
super.onDestroy();
Log.d(Config.LOGTAG, "service destroyed");
}
public class GPSLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location location)
{
Toast.makeText(getBaseContext(), "GPS FIX RECEIVED: " + location.getLongitude() + " : " + location.getLatitude(), Toast.LENGTH_LONG).show();
Log.d(Config.LOGTAG, "GPS FIX RECEIVED: " + location.getLongitude() + " : " + location.getLatitude());
}
@Override
public void onProviderDisabled(String arg0)
{
Log.d(Config.LOGTAG, ":(");
}
@Override
public void onProviderEnabled(String arg0)
{
Log.d(Config.LOGTAG, ":)");
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
Log.d(Config.LOGTAG, ":/");
}
}
}
不幸的是,这根本不起作用: 该服务根据日志启动,但是当我例如打开谷歌地图并启用gps并在那里获得定位,位置监听器不会“通知”(即不记录任何内容)
如何做到这一点?
答案 0 :(得分:1)
我想知道它是否无法正常工作,因为没有收到被动位置,或者代码无效。所以我要做的第一件事就是开始收听网络和GPS位置(进行测试)并确保它们到达。如果他们这样做,那么这表明谷歌地图正在使用缓存的位置,并没有发起被动的位置广播。
如果您没有获得任何位置,则需要检查您的代码并使其与GPS /网络一起使用,然后再转移到被动位置。
答案 1 :(得分:1)
嘿,我认为您需要更新经度和纬度值。
点击此链接.. Click here
我已经尝试过并在Android手机上进行测试..它正在工作。
注意: 必须和应该在Android手机上测试GPS状态。 它不会在eclipse模拟器上显示。但它会在手机上展示尝试..
很开心。
答案 2 :(得分:0)
如何使用Google(或Lost)LocationRequest
(代码从https://github.com/lostzen/lost/blob/master/docs/location-updates.md扩展)
LocationRequest request = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_NO_POWER) .setInterval(5000) .setSmallestDisplacement(10); LocationListener listener = new LocationListener() { @Override public void onLocationChanged(Location location) { if (location.getProvider().equals("gps")) { // Do stuff } } };
最佳精度,零功耗。
除非其他客户端请求位置更新,否则不会返回任何位置,在这种情况下,此请求将充当这些位置的被动侦听器。