0

我已链接到您的图书馆(再次感谢和出色的工作)。

在过去的两个小时里,我一直在尝试问题是什么,但我失败了。

这是我的登录屏幕代码中的 AlarmManager:

Intent i = new Intent(con, LocationPoller.class);
                i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(con,
                        LocationReceiver.class));
                i.putExtra(LocationPoller.EXTRA_PROVIDER,
                        LocationManager.NETWORK_PROVIDER);

                gps = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

                PendingIntent pi = PendingIntent.getBroadcast(con, 0, i, PendingIntent.FLAG_NO_CREATE);
                gps.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),
                        10 * 1000, pi);
                Log.d("Service: ",
                        "GPS Service started and scheduled with AlarmManager");

这是我自己创建的课程(不是您演示中的课程,虽然类似):

public class LocationReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle b = intent.getExtras();
        Location loc = (Location) b.get(LocationPoller.EXTRA_LOCATION);

        String msg;

        if (loc == null)
        {
            loc = (Location) b.get(LocationPoller.EXTRA_LASTKNOWN);

            if (loc == null)
            {
                msg = intent.getStringExtra(LocationPoller.EXTRA_ERROR);
            }
            else
            {
                msg = "TIMEOUT, lastKnown=" + loc.toString();
            }
        }
        else
        {
            msg = loc.toString();
        }

        if (msg == null)
        {
            msg = "Invalid broadcast received!";
        }

        Log.d("GPS Broadcast: ", "Location: " + msg);
    }

}

什么都没有发生。我假设这是因为我根本没有在我的 logcat 中看到任何信息。另外,当我查看调试视图时,PollerThread(如果这是正确的术语)不断堆积,好像它们都在等待某些东西但没有发送任何广播。

我究竟做错了什么?通过网络确定位置应该不会花费太多时间吧?即使这是问题所在,我也应该得到一些反馈..

以下是我的清单的应用程序标签中的条目:

<receiver android:name="com.commonsware.cwac.locpoll.LocationPoller" />
        <receiver android:name=".LocationReceiver" />
        <service android:name="com.commonsware.cwac.locpoll.LocationPollerService" />
4

1 回答 1

1

LocationPoller设计用于更长的轮询周期:一个小时,而不是 10 秒。我从未LocationPoller以如此频繁的轮询周期进行测试,我也不打算支持LocationPoller短于DEFAULT_TIMEOUT两分钟的轮询周期。

因此,您应该做的第一件事就是首先弄清楚您为什么要为此烦恼LocationPoller。背后的要点LocationPoller是能够偶尔找出设备的位置,而无需您的代码必须已经运行(例如,您希望每小时自动检查一次 Foursquare)。如果您需要每 10 秒找出设备的位置,则需要LocationManager从前台活动中使用自己。

假设您确信这LocationPoller仍然是正确的解决方案,那么您应该做的下一件事是将轮询时间延长到更合理的时间,例如 5 分钟,看看是否有帮助。

如果这没有帮助,请尝试在demo/不修改的情况下运行项目。如果不起作用,那么您的设备中存在一些错误LocationPoller,或者您的设备中存在一些不兼容问题LocationPoller,我需要进行一些调查。

如果demo/项目确实有效,请制作一个副本,确认该副本有效,然后慢慢修改该副本,使其看起来更像您的生产代码,直到它停止工作——此时,您的最后一组更改代表了什么问题LocationPoller,我们可以确定这是否代表LocationPoller您使用它的错误或错误。

于 2013-04-03T11:58:49.260 回答