4

サービスが Google Play サービスのロケーション/アクティビティを開始するコードがいくつかあります。アクティビティ インテントが呼び出されたときに、ロケーション サービスの を変更したいと考えていsetPriorityます。

// Location
           mLocationRequest = LocationRequest.create();
           if (mostProbActName.equals("still")) {
               mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
               Log.i(TAG, "GOING TO BALANCED MODE!");
           } else {
               mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
               Log.i(TAG, "GOING TO HIGH MODE!");
           }

以下をセクションに入れましたonHandleIntentが、動作を変更しているようには見えません。これを実装するより良い方法はありますか?

4

1 に答える 1

0

変更を有効にするには、ロケーション クライアントを開始および停止する必要があります。以下のコード例は、Google Play Services 融合ロケーション プロバイダーを停止してから開始し、再接続してから onConnected で新しい設定を使用します。プリンシパルは、ロケーション マネージャーの停止と新しい設定の開始に似ています。

// only process changes  start is passed in isRecording is global
    if (isRecording != start) {
        isRecording = start;
        if (isRecording) {
            if (locationClient != null && locationClient.isConnected()) {
                locationClient.removeLocationUpdates(locationListener);
                locationClient.disconnect();
            }
            locationClient = null;
            Context context = weakContext.get();
            if (context != null) {
                locationClient = new LocationClient(context,
                        connectionCallbacks,
                        onConnectionFailedListener);
            }
            if (locationClient != null) {
                locationClient.connect();
            }
        } else if (locationClient != null) {
            if (locationClient.isConnected()) {
                locationClient.removeLocationUpdates(locationListener);
                locationClient.disconnect();
            }
            locationClient = null;
        }
    }



@Override
public void onConnected(Bundle arg0) {
    if (locationClient != null) {
        locationClient
                .requestLocationUpdates(
                        LocationRequest
                                .create()
                                .setInterval(locationInterval)
                                .setFastestInterval(locationInterval)
                                .setPriority(
                                        LocationRequest.PRIORITY_HIGH_ACCURACY)
                                .setSmallestDisplacement(recordDistance),
                        locationListener);
        runNotification();
    }
}
于 2015-02-04T15:33:14.507 に答える