我编写了一个实现LocationListener接口的IntentService。当第一次调用OnLocationChanged()方法时,服务应该发送一条消息。 但永远不会调用OnLocationChanged()。 这是我的代码:
public class MyIntentService extends IntentService implements LocationListener {
private int result = Activity.RESULT_CANCELED;
protected Messenger mMessenger;
protected LocationManager mLocationManager = null;
public MyIntentService() {
super("LocationService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.i(TAG, "Got starting intent: " + intent.toString());
Bundle extras = intent.getExtras();
if (extras != null) {
Messenger = (Messenger) extras.get("MESSENGER");
if(mLocationManager == null) {
mLocationManager = (LocationManager) MyIntentService.this
.getSystemService(Context.LOCATION_SERVICE);
}
String provider = LocationManager.GPS_PROVIDER;
boolean gpsIsEnabled = mLocationManager.isProviderEnabled(provider);
if(gpsIsEnabled) {
Context con = MyIntentService.this;
mLocationManager.requestLocationUpdates(provider, 0, 0,
MyIntentService.this);
}
else {
Log.i(TAG, "NO GPS!");
}
}
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, "Got Location");
Log.i(TAG, "Got Messenger: " + mMessenger.toString()
+ "\nand Location Manager: " + mLocationManager.toString());
if(mMessenger != null && mLocationManager != null){
result = Activity.RESULT_OK;
Message msg = Message.obtain();
msg.arg1 = result;
msg.obj = location;
mLocationManager.removeUpdates(MyIntentService.this);
try { mMessenger.send(msg); }
catch (RemoteException e) {
Log.i(TAG, "Exception caught : " + e.getMessage());
}
}
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
有人有想法吗?
答案 0 :(得分:7)
我编写了一个实现LocationListener接口的IntentService。
这不是一个好主意。 IntentService
不应该通过onHandleIntent()
方法执行任何操作。
当第一次调用OnLocationChanged()方法时,服务应该发送一条消息。但是永远不会调用OnLocationChanged()。
这并不奇怪,因为根据您的实现,服务在创建后将被破坏大约一毫秒左右。
如果您的目标是始终拥有合理的当前位置,请尝试Little Fluffy Location Library。或者,考虑我的LocationPoller
。