LocationManagerで利用可能なプロバイダーがあるかどうかを判断できますが、Google Play開発者サービスのロケーションAPIでそれを行うことはできますか?
何も有効になっていない場合、実際には「現在地へのアクセス」がオフになっていると、すべてのAPI呼び出し(connect()、requestLocationUpdates())は成功しますが、onLocationChanged()を取得することはありません。
LocationManagerとLocationClientの両方を使用する必要があるのはばかげているようです。
私が必要としているのは、onLocationChanged(0が決して呼び出されないことを知るための何らかの方法だと思います。
ドキュメントを調べましたが、LocationClientを使用して位置情報サービスが有効になっているかどうかを検出する方法も見つかりませんでした。 onConnected、onDisconnected、およびonConnectionFailedは、位置情報サービスが有効になっているかどうかにリンクされていないようです。
現在、LocationClientを使用して位置情報リクエストを行っていますが、古いlocationManager.isProviderEnabled(String provider)
メソッドを使用して、位置情報サービスが有効になっているかどうかを検出しています。これは私にとって最適です。LocationClientが方法を提供したとしても、GPSとネットワークを区別せず、ユーザーにGPSを有効にするように要求できるようにしたいのです。
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
//GPS Provider disabled
return false;
}
Google Play開発者サービス7.3.0以降、位置情報の更新が利用可能かどうかを検出する信頼できる方法があります。
LocationCallback
を実装して登録し、 onLocationAvailability()
をオーバーライドするか、 LocationServices.FusedLocationApi.getLocationAvailability()
を呼び出します可用性ステータスを取得します。 falseの場合、デバイス構成に何か変更がない限り、位置情報の更新は配信されないことがわかります。
この方法は実際には非常に賢明です。たとえば、ネットワークロケーションプロバイダーが常に有効になっている場合でも、WiFiが無効になっている場合、またはデバイスが機内モードの場合、WiFi専用デバイスでロケーション更新が配信されないことを判別できます。
Google Play Services 7.0 導入 a Settins Api ここで、必要な場所の設定を要求し、有効になっているかどうかを照会するか、ユーザーに有効にするように依頼できます。
これは私にとってはうまくいきます。 AmazonタブレットデバイスとSamsungs7でテスト済み
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS) {
//Google Play services are available
} else {
//Google Play services are not available on this device
}