19

Androidのドキュメントによると:

Google Play Services の一部である Google Location Services API は、位置プロバイダー、ユーザーの移動、および位置精度を自動的に処理する、より強力で高度なフレームワークを提供しますandroid.location

しかし、融合された位置情報プロバイダー (Google Play サービスの位置情報 API から) を使用して、ユーザーが位置情報を有効または無効にしているかどうかを確認する方法がわかりません。

古い ものを使用するのandroid.locationは簡単でした:

locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

しかし、Google Play Services 融合ロケーション プロバイダと古いAndroid ロケーションの両方を使用したくありません。

Fused Location Provider を使用して、ユーザーがロケーションを有効にしているかどうかを確認するにはどうすればよいですか?

前もって感謝します。

4

5 に答える 5

17

SettingsApiを参照してください: 位置情報リクエストを確認し、デバイスのシステム設定がアプリの位置情報のニーズに合わせて適切に構成されていることを確認してください。

于 2015-09-06T12:01:14.900 に答える
0

FusedLocationProviderClient を使用する場合は、まず、デバイスで Location が有効になっていることを確認する必要があります。

private fun isLocationEnabled(): Boolean {
    val activity: Activity? = this.activity
    val lm = activity?.getSystemService(Context.LOCATION_SERVICE) as? LocationManager
    if (lm != null) {
        val enabled = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            lm.isLocationEnabled
        } else {
            lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
                    || lm.isProviderEnabled(LocationManager.GPS_PROVIDER)
        }
        Log.d(TAG, "isLocationServiceEnabled", enabled)
        return enabled
    }
    return false
}

次に、LocationSettings を確認します。

val request = LocationRequest.create()
        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)

val settingRequest = LocationSettingsRequest.Builder()
        .addLocationRequest(request)
        .build()
// check Location settings for the request
LocationServices.getSettingsClient(context)
        .checkLocationSettings(settingRequest)
        .addOnSuccessListener {
            // OK!!
            // fusedLocationProviderClient.requestLocationUpdates
        }
        .addOnFailureListener {  exception ->
            if (exception  is ResolvableApiException) {
                try {
                    exception.startResolutionForResult(activity, RC_LOCATION_SETTINGS)
                } catch (ex: IntentSender.SendIntentException) {
                    // ignore
                }
            } else {
                // handle other errors
                showFusedDisabledDialog()
            }
        }

また、以下のリンクもご確認ください。

https://developer.android.com/training/location/change-location-settings

于 2020-01-18T15:50:19.097 に答える