私のアプリは、現在の場所を取得し、ユーザーが地図上に配置したポイントにルーティングするために、Location Client を使用します。私は Google Play サービスを初めて使用しますが、ベスト プラクティスとして、いつ LocationClient を切断する必要があるのか疑問に思っています。
1 に答える
Android トレーニング サイトでは、 を接続および切断する 2 つの方法が提案されていLocationClient
ます。現在地の取得トレーニングでは、LocationClient
は で初期化されonCreate
、connect()
で呼び出されonStart
、次のように呼び出されます (ソース コード からdisconnect()
取得)。onStop
@Override
protected void onCreate(Bundle savedInstanceState) {
mLocationClient = new LocationClient(this, this, this);
}
@Override
public void onStop() {
mLocationClient.disconnect();
super.onStop();
}
@Override
public void onStart() {
super.onStart();
mLocationClient.connect();
}
次に、位置情報の更新をいつ、どこで開始または停止するかを選択できます。
ユーザーの現在のアクティビティの認識では、ユーザーがLocationClient
アクティビティ認識の更新を要求または停止するたびに、 が初期化されます。最初にconnect()
が呼び出され、次に でonConnected
orrequestActivityUpdates
がremoveActivityUpdates
呼び出され、その直後にdisconnect()
が呼び出されます。サンプルソース コードDetectionRequester
には、アクティビティ認識の更新を開始するというクラスがあります。
public void requestUpdates() {
getActivityRecognitionClient().connect();
}
@Override
private void onConnected() {
getActivityRecognitionClient().requestActivityUpdates(...);
getActivityRecognitionClient().disconnect();
}
@Override
public void onDisconnected() {
mActivityRecognitionClient = null;
}
private ActivityRecognitionClient getActivityRecognitionClient() {
if (mActivityRecognitionClient == null) {
mActivityRecognitionClient = new ActivityRecognitionClient(...);
}
return mActivityRecognitionClient;
}
DetectionRemover
また、アクティビティ認識の更新を停止するという別の同様のクラスがあります。
もう 1 つの方法は、次のように、両方のメソッド (requestUpdates
とremoveUpdates
) を同じクラスに含めることです。
public enum RequestType {
START, STOP;
}
@Override
public void onConnected(Bundle bundle) {
switch (mRequestType) {
case START:
getActivityRecognitionClient().requestActivityUpdates(...);
break;
case STOP:
getActivityRecognitionClient().removeActivityUpdates(...);
break;
default:
break;
}
getActivityRecognitionClient().disconnect();
}
@Override
public void onDisconnected() {
mActivityRecognitionClient = null;
}
public void requestUpdates() {
mRequestType = RequestType.START;
getActivityRecognitionClient().connect();
}
public void removeUpdates() {
mRequestType = RequestType.STOP;
getActivityRecognitionClient().connect();
}
private ActivityRecognitionClient getActivityRecognitionClient() {
if (mActivityRecognitionClient == null) {
mActivityRecognitionClient = new ActivityRecognitionClient(...);
}
return mActivityRecognitionClient;
}
同じアプローチを使用して、位置情報の更新を開始および停止できます。
このアプローチのどれがベスト プラクティスと見なされるかはわかりませんが、それらはサンプル ソース コードに含まれています。私は個人的に、すべてのプロジェクトで 3 番目のアプローチを使用しています。3 番目のアプローチは、最近まで Activity Recognition サンプルにありました。