我为摩托罗拉Droid构建了一个应用程序,该应用程序应该自动使用手机的位置更新服务器。在用户在主活动屏幕上执行特定任务之后,设置警报以使用服务定期更新用户的位置。当用户完成另一项任务时,警报会明确停止。
事实上,我在主要活动的onCreate()方法中设置了一个位置管理器,该方法应该将第一个获取的lat / long放入两个textview字段中。即使清单设置为获取粗调和细调并且我使用requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
,minTime和minDistance设置为零,我也没有看到屏幕上出现的坐标。有了这个,我没有记录服务器上的任何位置。
当我使用样本坐标对文本视图进行播种时,它们在服务器上正常记录。我不是一台可以运行IDE的计算机,因此目前没有代码,但我非常渴望得到一些帮助。
另一件事是主要活动屏幕在用户手动点击“发送数据”之前调用摄影应用程序。我怀疑我可能需要覆盖主要活动的onResume()
方法来进行此位置获取。请帮助,谢谢。
标记。
答案 0 :(得分:0)
对于这种复杂的东西,没有代码,很难帮助你。
在黑暗中进行全面刺杀,尝试将requestLocationUpdates()
与AlarmManager
警报和服务结合使用是很困难的。例如,如果服务是IntentService
,并且它正在注册位置更新,那么在最好的情况下它将完全失败,并且在最坏的情况下,您将像筛子那样泄漏内存。还有一个问题是在等待定位修复进入时确保设备处于唤醒状态,因为设备可能会想要重新进入睡眠状态。
我不知道TextViews
在哪里发挥作用,或者他们与某个服务器有什么关系,或者他们与onResume()
有什么关系,或者他们有什么需要做“摄影应用程序”。
答案 1 :(得分:0)
感谢CommsWare。由于评论字段中的空间限制,我使用这种方式来回应。
用户应该拍摄他们即将拾取的物品的照片并将其发送到服务器。完成此操作后,服务器会发回一个轮询周期,以便手机定期发送其位置。我设置textViews
来显示获得的纬度/经度(见下文),但这部分直到两个晚前才开始工作。在我有点耐心之后它终于工作了,让手机花时间去获得一个位置。我认为问题在于我不允许手机进行定位,所以它无法正常工作。现在的问题仍然是定期更新可能不起作用,基于你所说的,并且基于我在完全晴朗的天空下站在外面大约2分钟的事实,然后才得到定位。
这是一些代码的快照(这部分在主要活动的onCreate覆盖中以获得第一个位置修复):
`LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
0, new LocationListener() {
public void onStatusChanged(String provider, int status,
Bundle extras) {
// called when the provider status changes. Possible
// status: OUT_OF_SERVICE, TEMPORARILY_UNAVAILABLE or
// AVAILABLE.
}
public void onProviderEnabled(String provider) {
// called when the provider is enabled by the user
}
public void onProviderDisabled(String provider) {
// called when the provider is disabled by the user, if
// it's already disabled, it's called immediately after
// requestLocationUpdates
}
public void onLocationChanged(Location location) {
double latitute = location.getLatitude();
double longitude = location.getLongitude();
tv5.setText(""+latitute);
tv6.setText(""+longitude);
}
});
`
以下是SOAP请求和响应处理机制的一部分 `//以秒为单位获取轮询周期。 String [] getPollNumber; getPollNumber = resultParams [2] .split(“;”);
//Set up the intent to be passed to the tracking service.
Intent updateLocation = new Intent (this,TrackUser.class);
PendingIntent pendingIntent = PendingIntent.getService(PickUp.this, 0, updateLocation, 0);
//Set up the alarm manager to be used to periodically send updates.
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
//If instruction = 1, start tracking the user.
if(instruction == 1)
{
//Start tracking service on phone.
pollPeriod = Integer.parseInt(getPollNumber[0]);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (pollPeriod*1000), pollPeriod*1000, pendingIntent);
}
else
{
if(instruction == 0)
{
//Stop tracking service.
stopService(new Intent(this,TrackUser.class));
alarmManager.cancel(pendingIntent);
}
}
在跟踪服务类中,我使用从其onStart()重写调用的方法,该方法将当前坐标简单地打包到SOAP对象中并更新服务器。如果手机像你说的那样进入睡眠状态,我担心GPS可能没有足够的时间在这些更新期间锁定。我想知道当服务启动时我应该有某种类型的计时器(也许是requestLocationUpdates的minTime设置?)让手机保持唤醒状态大约3分钟,这样可以进行修复?如果这些代码片段有帮助,请告诉我,如果可以更新位置的想法,谢谢。