私のアプリは、ユーザーの位置を定期的に追跡してサーバーに送信するように設計されています。最近、Google Play Services Location APIでコードを変更しました。
Locationclientを作成し、onStartCommandでサービスに接続しました
public int onStartCommand(Intent intent, int flags, int startId) {
setUpLocationClientIfNeeded();
if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
mLocationClient.connect();
return START_STICKY;
}
onConnectedメソッドでは、位置情報リクエストを送信し、
@Override
public void onConnected(Bundle arg0) {
System.out.println("Connected ...");
mLocationClient.requestLocationUpdates(REQUEST, this);
}
REQUESTオブジェクトは、
private static final LocationRequest REQUEST = LocationRequest.create()
.setInterval(5*60*1000) // 5 minutes
.setFastestInterval(3*60*1000) // 3 minutes
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
問題は、
上記のコードの問題は何ですか? (「切断」のログも表示できませんでした)
バックグラウンドサービスの完全なソースコードは次の場所から入手できます。
https://Gist.github.com/blackcj/20efe2ac885c7297a676
OnStartCommandにスーパーコールを追加してみてください。
/**
* Keeps the service running even after the app is closed.
*
*/
public int onStartCommand (Intent intent, int flags, int startId)
{
super.onStartCommand(intent, flags, startId);
setUpLocationClientIfNeeded();
if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
{
mLocationClient.connect();
}
return START_STICKY;
}