チュートリアルとほぼ同じように、Google Play ロケーション API を使用しています。しかし、状況によっては失敗するようです。説明させてください:
まず、クライアントを作成して接続します。
mLocationClient = new LocationClient(mContext, this, this);
mLocationClient.connect();
次に接続すると、保留中のインテントを渡して位置情報の更新をリクエストします。
@Override
public void onConnected(Bundle arg0) {
LocationRequest locationRequest = LocationRequest.create().setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY).setInterval(UPDATE_INTERVAL).setFastestInterval(FASTEST_INTERVAL);
mPendingIntentLocationUpdated = PendingIntent.getService(mContext, 0, (new Intent(mContext, MyService.class)).setAction(MyService.ACTION_LOCATION_UPDATED), 0);
mLocationClient.requestLocationUpdates(locationRequest, mPendingIntentLocationUpdated);
}
位置情報が更新されてから 1 分後、removeLocationUpdates() を呼び出して停止します。
そして、このコード全体 (クライアント接続、更新の要求) を非常に定期的に (1 時間に数回) 呼び出します。
これは最初のうちは機能しますが、一部のデバイスではしばらくすると失敗します: LocationClient が接続されて onConnected() が呼び出されますが、何らかの理由で pendingIntent が起動されなくなります!
Android 4.1.2 でのみ失敗するようです。Android 4.2 または 4.3 では問題は発生していません。
このバグの処理方法が本当にわかりません。ヘルプや提案は大歓迎です!
編集: WiFi が無効になっている場合にのみ失敗します。WiFi を有効にして接続すると、位置情報の更新が再び機能します。位置情報サービスでは、3G がオンで接続されていても、場所を更新するために WiFi が必要なようです... しかし、WiFi は必要ないはずです!