感谢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分钟,以便修复可以进来吗?请让我知道这些代码片段是否有帮助,如果可以更新位置的想法,谢谢。