0

我之前问过一个关于 Commonware 的位置轮询器的问题,并且之前让它工作过。它仍然工作,但有一个问题。

昨天,(经过一些实验和代码研究,哈哈)我意识到为了使用这两个选项(首选 GPS,但如果不可用,请使用网络)获取位置,我必须将额外的作为“BOTH”传递。

然而,在这样做之后,LocationPollerService 不会强制 GPS 定位我。让我在下面描述这个问题。

假设我打开了 GPS,另一个应用程序正在积极使用 GPS 并保持锁定。现在,如果我使用 LocationPollerService,它将返回来自 GPS 的值。但是,当我的 GPS 打开但未锁定时,LocationPollerService 不会尝试锁定,而只是移动到基于网络的位置,这在我启用 GPS 时不需要。

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

这是链接:

Commonware 的位置轮询器

我的问题?当 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();
            }
        }
4

0 回答 0