CWAC LocationPoller - 未收到广播

时间:2013-04-03 09:13:18

标签: android commonsware-cwac

我与你的图书馆有关(再一次,感谢和出色的工作)。

过去两个小时我一直在努力解决问题,但我失败了。

这是我登录屏幕代码中的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" />

1 个答案:

答案 0 :(得分:1)

LocationPoller专为更长时间的投票时间而设计:一小时,而不是十秒。我从未在频繁的投票期内对LocationPoller进行过测试,也不打算在短于两分钟LocationPoller的投票期内支持DEFAULT_TIMEOUT

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

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

如果这没有帮助,那么尝试运行demo/项目而不做任何修改。如果 不起作用,那么LocationPoller中存在一些错误,或者设备中LocationPoller绊倒的某些不兼容性,我需要做一些调查。

如果demo/项目 工作,请复制,确认副本有效,然后慢慢修改副本,使其看起来更像您的生产代码,直到它停止工作 - 此时,您的上一组更改代表了LocationPoller的错误,我们可以判断这是否代表LocationPoller中的错误或您使用错误的错误。