我想做的是以下内容:一个服务,持续监听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并在那里获得定位,位置监听器不会“通知”(即不记录任何内容)
怎么做对了?
最佳答案 我想知道它是否无效,因为没有收到被动位置,或者代码无效.所以我要做的第一件事就是开始收听网络和GPS位置(进行测试)并确保它们到达.如果他们这样做,那么这表明谷歌地图正在使用缓存位置,并没有发起被动位置广播.
如果您没有获得任何位置,则需要检查您的代码并使其使用GPS /网络,然后再转移到被动位置.