2016-05-25 15 views
1

ケース:アプリケーションでウェブリクエストを指定するためのデバイスの場所が必要です。ロケーションプロバイダが無効になっている場合は、最後に既知の場所を使用する必要があります。 android.locationseems to be deprecated in favor of Fused location APIとして、私は新しいAPIを使用することに決めましたが、いくつかの問題が発生しました。古いAPIを使用すると、私のケースは次のようになります。Android:新しいGoogleクライアントAPIの場所

//get Location 
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 
... 
bestProvider = locationManager.getBestProvider(criteria, true); 

protected void onResume() { 
    super.onResume(); 

    //check providers. If providers disabled, use last known location 
    if (locationManager.isProviderEnabled(bestProvider)) { 
     locationManager.requestLocationUpdates(bestProvider, 1000 * 60, 100, this); 
    } else { 
     Location location = locationManager.getLastKnownLocation(bestProvider); 
    } 

しかし、Fused APIで同様の操作を行う方法がわかりません。新しいAPIをプロバイダで利用するにはどうすればいいですか?融合した場所の新しいインターフェイス(GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener)が私にヒントを与えないので。

私が理解しようとしているのは、私の記事に記載されているユースケースです。 ロケーションプロバイダが無効になっている場合は、最後に既知の場所を使用する必要があります。このような場合のコアロケーションAPIの条件文は、isProviderEnabled()メソッドの結果でした。しかし、新しいAPIはどうですか?

答えて

2

まず、LocationManagerは非推奨です。しかし、Android APIを直接使用しています。 Google Fused LocationはGoogle APIに依存しています(Android APIではなく、デフォルトですべての携帯端末に搭載されているわけではありません)。

Google APIでは、使用するプロバイダーについて心配する必要はありません。しかし、必要なのは、APIに接続し、コールバックを登録し、リクエストを送信することだけです。いくつかのGoogleのデベロッパードキュメントから

https://developer.android.com/training/location/receive-location-updates.html

これはあなたの活動に

apply plugin: 'com.android.application' 
... 

dependencies { 
    compile 'com.google.android.gms:play-services-location:9.0.0' 
} 

build.gradleのアプリに置くべきであり、このようなものは

を置くべきです
mGoogleApiClient = new GoogleApiClient.Builder(this) 
     .addApi(LocationServices.API) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .build() 

mGoogleApiClientは次のように宣言する必要がありますGoogleApiClient GoogleApiClient mGoogleApiClient;

もちろん、このアクティビティではGoogleApiClient.ConnectionCallbacksを実装する必要があります。これにはonConnectedとonConnectionSuspendedという2つの関数があります。

GoogleApiClient.OnConnectionFailedListenerも実装してください。これは、関数がOnConnectionFailedで

をOnConnectionFailed、OnConnectionには、障害(例えばAlertDialogはエラーがGoogleのAPIサービスに関連していたことを言って)

を扱う持って、あなたはこの

LocationRequest mLocationRequest = new LocationRequest().setInterval(1000 * 60); 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
のようなものを入れることができます

これについては、アクティビティはcom.google.android.gms.location.LocationListenerを実装する必要があります

これは1つの方法です。もう1つの方法は、BroadcastReceiverとバインドするためにPendingIntentを使用することですリスナーのメソッドはOKかもしれません)

+1

ありがとうございますが、この部分は私にとっては明らかです。私が理解しようとしているのは、自分の投稿に記述されているユースケースです。 _ロケーションプロバイダが無効になっている場合は、最後に既知の場所を使用する必要があります。そのため、この場合のコアロケーションAPIの条件文は、isProviderEnabled()メソッドの結果でした。しかし、新しいAPIはどうですか? –

関連する問題