我想要做的是:一个服务,持续监听 GPS(是的:仅限 GPS)位置更新,而不主动请求它们 - 也就是说,这个应用程序在其他应用程序请求/接收 GPS 位置更新之前不会消耗任何额外的电池寿命或 CPU 时间。然后我的应用程序应该执行一些功能。之后,它应该回到“睡眠”状态,等待下一个 GPS 位置修复由其他应用程序请求...
我已经阅读了这篇文章http://android-developers.blogspot.de/2011/06/deep-dive-into-location.html但这似乎有不同的重点。实际上,我有点迷失了...如何精确地使用这个被动位置提供者?我无法让它工作。
到目前为止,我的代码是:我有这个(远程)服务注册位置侦听器:
很遗憾,这根本不起作用: 根据日志启动了服务,但当我打开启用 GPS 的 Google 地图并在那里获取定位时,位置监听器没有“通知”(即没有记录任何内容)。
该如何正确实现?
我已经阅读了这篇文章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 的 Google 地图并在那里获取定位时,位置监听器没有“通知”(即没有记录任何内容)。
该如何正确实现?