我与你的图书馆有关(再一次,感谢和出色的工作)。
过去两个小时我一直在努力解决问题,但我失败了。
这是我登录屏幕代码中的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" />
答案 0 :(得分:1)
LocationPoller
专为更长时间的投票时间而设计:一小时,而不是十秒。我从未在频繁的投票期内对LocationPoller
进行过测试,也不打算在短于两分钟LocationPoller
的投票期内支持DEFAULT_TIMEOUT
。
因此,你应该做的第一件事就是弄清楚为什么你首先要打扰LocationPoller
。 LocationPoller
背后的要点是能够偶尔找出设备的位置,而您的代码必须已经运行(例如,您希望每小时自动检入Foursquare)。如果您需要每隔10秒钟找出设备的位置,则需要在前台活动中自己使用LocationManager
。
假设您确信LocationPoller
仍然是正确的解决方案,那么您应该做的下一件事就是将您的投票期延长到更合理的时间,例如5分钟,看看是否有帮助。
如果这没有帮助,那么尝试运行demo/
项目而不做任何修改。如果 不起作用,那么LocationPoller
中存在一些错误,或者设备中LocationPoller
绊倒的某些不兼容性,我需要做一些调查。
如果demo/
项目 工作,请复制,确认副本有效,然后慢慢修改副本,使其看起来更像您的生产代码,直到它停止工作 - 此时,您的上一组更改代表了LocationPoller
的错误,我们可以判断这是否代表LocationPoller
中的错误或您使用错误的错误。