【发布时间】:2013-07-17 15:25:03
【问题描述】:
我正在尝试编写一个简单的 Android 服务,该服务在后台运行并从 LocationClient(Google Map API Android V2)接收位置更新。问题是当屏幕关闭时,我的服务不再接收位置更新。我试图检查服务是否处于活动状态,即使屏幕关闭也是如此(我有一个 TimerTask 调度日志)。当屏幕打开时,我可以接收位置更新,但是当屏幕关闭时,我只看到 TimerTask 的日志并且我没有收到任何位置更新。唤醒屏幕再次打开位置更新。怎么解决?
这是我的简单服务:
public class LocationService extends Service implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, LocationListener{
private static final String TAG = LocationService.class.getSimpleName();
private LocationClient mLocationClient;
private Timer timer;
private static final LocationRequest REQUEST = LocationRequest.create()
.setInterval(5*1000) // 5 seconds
.setFastestInterval(3*1000) // 3 seconds
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
@Override
public void onCreate() {
Log.d(TAG, "Creating..");
mLocationClient = new LocationClient(this, this, this);
timer = new Timer();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Starting..");
if(!mLocationClient.isConnected() || !mLocationClient.isConnecting()) {
Log.d(TAG, "Connecting location client..");
mLocationClient.connect();
}
timer.scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
Log.d(TAG, "TimerTask executing");
}}, 0, 3*1000);
return START_STICKY;
}
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.d(TAG, "Connection failed..");
stopSelf();
}
@Override
public void onConnected(Bundle bundle) {
System.out.println("Connected ...");
mLocationClient.requestLocationUpdates(REQUEST, this);
}
@Override
public void onDisconnected() {
Log.d(TAG, "Disconnected..");
stopSelf();
}
@Override
public IBinder onBind(Intent arg0) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, "Received location update");
}
@Override
public void onDestroy() {
Log.d(TAG, "Destroying..");
timer.cancel();
mLocationClient.removeLocationUpdates(this);
}
}
【问题讨论】:
-
我也有同样的问题。我解决不了。任何新闻?这是一个错误吗?
-
给你加个赏金,给题主多加点奖励...
-
您能接受编辑吗?你能开始赏金吗? @user1781028
-
@User1781028,你能告诉我为什么在这个服务中创建了一个单独的线程(定时器)。谢谢你
-
我也有同样的问题,使用 LocationManager 并没有解决问题。我正在考虑使用wakeLock,但它会太快耗尽电池..
标签: android android-service android-maps-v2