CW位置轮询器 - 不强制GPS尝试锁定

时间:2013-05-31 04:17:38

标签: android android-location commonsware-cwac

之前我曾经问过一个关于Commonware位置轮询器的问题并且之前已经开始工作了。它仍然有效但存在问题。

昨天,(经过一些实验和代码研究之后)我意识到为了使用两个选项来获取位置(更喜欢GPS,但如果不可用则使用网络)我不得不将额外的内容传递给'BOTH'。< / p>

然而,在执行此操作后,LocationPollerService不会强制GPS定位我。让我来描述下面的问题。

假设我打开了GPS,另一个应用程序主动使用GPS并保持锁定。现在,如果我使用LocationPollerService,它将返回GPS中的值。 但是,当我的GPS处于打开状态但没有锁定时,LocationPollerService不会尝试锁定,而只是转移到基于网络的位置,这不是我启用GPS时所需要的。

我会在这里添加代码,但我相信这是 cwac-locpoll 特有的问题,代码已经在线。

这是链接:

Commonware's Location Poller

我的问题?如何在GPS开启时强制服务尝试定位?

更新

这是我认为它寻找GPS位置但实际上没有尝试过的地方。如果你能提供帮助,那就太好了。

@Override protected void onPreExecute()
        {
            // Added in enabled check to even check if there is a provider
            // enabled.

            if (provider.equalsIgnoreCase("BOTH"))
            {
                if (!locMgr.isProviderEnabled(LocationManager.GPS_PROVIDER) && !locMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
                {
                    Log.i(TAG, "Both providers are disabled");
                    // There is no provider so fail with the LKL if possible
                    Intent toBroadcast = new Intent(intentTemplate);
                    toBroadcast.putExtra(LocationPoller.EXTRA_ERROR, "Location Provider disabled!");
                    toBroadcast.putExtra(LocationPoller.EXTRA_ERROR_PROVIDER_DISABLED, true);

                    Location lastLoc = locMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    if (lastLoc == null)
                        lastLoc = locMgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

                    toBroadcast.putExtra(LocationPoller.EXTRA_LASTKNOWN, lastLoc);
                    sendBroadcast(toBroadcast);

                    quit();
                    return;
                }
            }
            else if (!locMgr.isProviderEnabled(provider))
            {
                Log.i(TAG, provider + " is disabled");
                // There is no provider so fail with the LKL if possible
                Intent toBroadcast = new Intent(intentTemplate);
                toBroadcast.putExtra(LocationPoller.EXTRA_ERROR, "Location Provider disabled!");
                toBroadcast.putExtra(LocationPoller.EXTRA_ERROR_PROVIDER_DISABLED, true);
                toBroadcast.putExtra(LocationPoller.EXTRA_LASTKNOWN, locMgr.getLastKnownLocation(provider));
                sendBroadcast(toBroadcast);

                quit();
                return;
            }

            onTimeout = new Runnable()
            {
                public void run()
                {
                    Intent toBroadcast = new Intent(intentTemplate);

                    toBroadcast.putExtra(LocationPoller.EXTRA_ERROR, "Timeout!");
                    toBroadcast.putExtra(LocationPoller.EXTRA_ERROR_PROVIDER_DISABLED, false);

                    Location lastLoc = null;
                    if (provider.equalsIgnoreCase("BOTH"))
                    {
                        Log.i(TAG, "Both provider timed out");
                        lastLoc = locMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (lastLoc == null)
                            lastLoc = locMgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    }
                    else
                    {
                        Log.i(TAG, provider + " timed out");
                        lastLoc = locMgr.getLastKnownLocation(provider);
                    }

                    toBroadcast.putExtra(LocationPoller.EXTRA_LASTKNOWN, lastLoc);
                    sendBroadcast(toBroadcast);
                    quit();
                }
            };

            handler.postDelayed(onTimeout, TIMEOUT);

            try
            {
                Log.e(TAG, "Provider: " + provider);
                if (provider.equalsIgnoreCase("BOTH"))
                {
                    Log.i(TAG, "Adding both providers");
                    locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
                    locMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
                }
                else
                {
                    locMgr.requestLocationUpdates(provider, 0, 0, listener);
                }
            }
            catch (IllegalArgumentException e)
            {
                // see http://code.google.com/p/android/issues/detail?id=21237
                Log.w(TAG, "Exception requesting updates -- may be emulator issue", e);
                quit();
            }
        }

0 个答案:

没有答案