我看到很多问题,但无法找出问题所在。
我正在为Android编写现场服务应用程序。 在一个活动(MyActivity.java)中,我有两个按钮:开始和停止。
当现场工人按下开始按钮时,我需要使用GPS获取他的当前位置,并及时将其发送到服务器(默认为5分钟,这里设置为20秒进行测试)。 客户希望这样做以查看工人在交通中花费的时间,我的城市(伊斯坦布尔)的交通情况非常糟糕。
我在我的活动中有一个AlarmManager,当按下开始按钮时,通过
我使用停止按钮取消闹钟。
在这里它运行得非常完美,服务已经启动。它的
以下是服务内部的代码:
首先,这是一个进行此操作的好方法吗?如果是,请检查我是否遗漏了什么。如果不是,请告诉我如何更好地实施这个方法。
谢谢 :)
我正在为Android编写现场服务应用程序。 在一个活动(MyActivity.java)中,我有两个按钮:开始和停止。
当现场工人按下开始按钮时,我需要使用GPS获取他的当前位置,并及时将其发送到服务器(默认为5分钟,这里设置为20秒进行测试)。 客户希望这样做以查看工人在交通中花费的时间,我的城市(伊斯坦布尔)的交通情况非常糟糕。
我在我的活动中有一个AlarmManager,当按下开始按钮时,通过
AlarmManager.setRepeating()
设置闹钟来启动服务(ServiceClass.java)。Intent intent = new Intent (MyActivity.this, ServiceClass.class);
mPendingIntent = PendingIntent.getService(MyActivity.this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mAlarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 20*1000,
mPendingIntent);
我使用停止按钮取消闹钟。
在这里它运行得非常完美,服务已经启动。它的
onCreate()
、onStart()
和 onDestroy()
方法都已执行。但是我无法获取位置信息。由于我没有实际设备,所以我正在使用 DDMS 来发送位置信息。但是应用程序会跳过此步骤,并将我的位置的经度和纬度打印为 Lon:0 Lat:0。以下是服务内部的代码:
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d("Testing", "Service got started, calling location updates:");
mLocationManager.requestSingleUpdate(mCriteria, mLocationListener,
getMainLooper());
Log.i("TESTING LOCATION UPDATE: LOCATION:", "\nLat:" + mLatitude +
" Lon:" + mLongitude);
stopSelf(startId);
Log.d("Testing", "Service Stopped!");
最后,这是我的LocationListener:
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if(location != null){
mLatitude = location.getLatitude();
mLongitude = location.getLongitude();
Log.i("onLocationChanged(Location location)", "Lat:"+mLatitude + "
Lon:" + mLongitude);
}
还有一件事引起了我的注意,当我运行代码时:
mLocationProvider = mLocationManager.getBestProvider(mCriteria, true);
Log.i("BEST PROVIDER IS:", mLocationProvider);
它说最佳提供者是:gps。但是在onProviderEnabled()中的日志从未显示在logcat中。
@Override
public void onProviderEnabled(String s) {
Log.v("onProviderEnabled", "ENABLED");
}
有两点需要补充说明,如果我使用:
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
mLocationListener);
它也不起作用。
但是这个可以工作,我可以获取LastKnownLocation:
Location lastKnown = mLocationManager.getLastKnownLocation(
LocationManager.GPS_PROVIDER);
首先,这是一个进行此操作的好方法吗?如果是,请检查我是否遗漏了什么。如果不是,请告诉我如何更好地实施这个方法。
谢谢 :)