Google Play Services の Activity Recognition では、サービスが切断された場合 (切断される可能性があります)、クライアントを削除することを推奨しています。
http://developer.android.com/training/location/activity-recognition.html
場合によっては、disconnect() を呼び出す前に、位置情報サービスがアクティビティ認識クライアントから切断されることがあります。この状況に対処するには、onDisconnected() を実装します。このメソッドでは、リクエストが進行中でないことを示すリクエスト フラグを設定し、クライアントを削除します。
それは問題ありませんが、[安全に] 再接続する方法についての指示はありません。常にアクティビティ認識を維持する必要があるフォアグラウンド サービスからこれを実行しているため、次の切断:
@Override
public void onDisconnected() {
mRecognitionEnabled = false;
mRequestInProgress = false;
mRecognitionClient = null;
//Re-initialise Activity Recognition if service is still running
if (sServiceRunning) {
triggerActivityRecognition();
}
}
クライアントを再インスタンス化し、再接続します。
private void triggerActivityRecognition() {
if (!mRequestInProgress ) {
mRequestInProgress = true;
mRecognitionClient = new ActivityRecognitionClient(this, this, this);
mRecognitionClient.connect();
}
}
しかし、私が入手しているいくつかのバグ レポートによると、次のような例外が発生しています。
java.lang.NullPointerException
at com.google.android.gms.internal.bh.a(Unknown Source)
at com.google.android.gms.internal.k.f(Unknown Source)
at com.google.android.gms.internal.k$e.onServiceConnected(Unknown Source)
at com.google.android.gms.internal.l.a(Unknown Source)
at com.google.android.gms.internal.k.connect(Unknown Source)
at com.google.android.gms.location.ActivityRecognitionClient.connect(Unknown Source)
at com.myapp.MyService.triggerActivityRecognition(MyService.java:316)
at com.myapp.MyService.onDisconnected(MyService.java:407)
at com.google.android.gms.internal.k.A(Unknown Source)
at com.google.android.gms.internal.k$e.onServiceDisconnected(Unknown Source)
at com.google.android.gms.internal.l$a$a.onServiceDisconnected(Unknown Source)
切断はめったに発生しませんが、毎回同じスタック トレースが発生します。
これが Google Play Services によって引き起こされている場合、それを防ぐためにできることはありますか、それとも Android でログに記録する必要があるバグですか?