android – 被动*听* gps位置更新

我想做的是以下内容:一个服务,持续监听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 /网络,然后再转移到被动位置.

点赞