ここにあるPlay Services 7.0
ドキュメントを見ています:
http://android-developers.blogspot.in/2015/03/google-play-services-70-places-everyone.html?m=1
https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi
ご覧のとおり、Android はアプリが位置情報を有効にする方法を簡素化し、1 回のタップで位置情報を取得できるようにしました。これは素晴らしいことです。
ただし、頭を包み込むことができないのは、これがアクセス許可モデルとどのように連携するかということです。
クエリをできるだけ明確かつ単純にするように努めます。
たとえば、ドキュメントを引用します。
この API を使用するGoogleApiClient
には、少なくとも をサポートする を最初に作成しますLocationServices.API
。次に、クライアントを次の場所に接続しますGoogle Play services
。
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build()
...
mGoogleApiClient.connect();
次に、 を作成し、アプリが使用LocationSettingsRequest.Builder
するすべての を追加します。LocationRequests
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequestHighAccuracy)
.addLocationRequest(mLocationRequestBalancedPowerAccuracy);
次に、現在の場所の設定が満たされているかどうかを確認します。
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(mGoogleClient, builder.build());
がPendingResult
戻ると、クライアントはLocationSettingsResult
オブジェクトからのステータス コードを見て、場所の設定を確認できます。クライアントは、以下を呼び出して、関連するロケーション設定の現在の状態を取得することもできますgetLocationSettingsStates()
。
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult result) {
final Status status = result.getStatus();
final LocationSettingsStates = result.getLocationSettingsStates();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
...
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user
// a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult(
OuterClass.this,
REQUEST_CHECK_SETTINGS);
} catch (SendIntentException e) {
// Ignore the error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
...
break;
}
}
});
ステータス コードが の場合RESOLUTION_REQUIRED
、クライアントは を呼び出しstartResolutionForResult(Activity, int)
てダイアログを表示し、それらの要求を満たすために場所の設定を変更する許可をユーザーに求めることができます。ダイアログの結果は を介して返されonActivityResult(int, int, Intent)
ます。クライアントが利用可能なロケーション プロバイダーに関心がある場合は、LocationSettingsStates
を呼び出して Intent からを取得できfromIntent(Intent)
ます。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
final LocationSettingsStates states = LocationSettingsStates.fromIntent(intent);
switch (requestCode) {
case REQUEST_CHECK_SETTINGS:
switch (resultCode) {
case Activity.RESULT_OK:
// All required changes were successfully made
...
break;
case Activity.RESULT_CANCELED:
// The user was asked to change settings, but chose not to
...
break;
default:
break;
}
break;
}
}
上記のスニペットは、[はい] と [いいえ] のオプションを含む場所ダイアログをユーザーに表示し、[はい] をクリックすると場所を有効にします。しかし、ドキュメントには、実際にそのダイアログを作成することについては何も述べられていません。それはシステム自体によって処理されますか?その場合、どのような方法を使用する必要がありますか?
またLocationServicesAPI
、許可モデルで を使用しようとすると、フローはどのように機能するはずですか?
これは、最初に要求するパーミッション モデル ダイアログを表示しACCESS_FINE_LOCATION permission
、そのパーミッションが付与された場合は、「場所を有効にする必要があります」ダイアログを表示することを意味するのでしょうか? それがAndroid推奨の方法ですか?私はそれに関するドキュメントを見ていません。
TL;DR
新しいパーミッション モデル API と を一緒に使用するにはどうすればよいですか
LocationServicesAPI
。どちらも複数の popus を必要とします。Android推奨の方法はありますか?ユーザーが
ACCESS_FINE_LOCATION
アクセス許可を付与するが、位置情報を有効にすることに同意しない場合、そのフローはどのように機能するはずですか。ユーザーが
ACCESS_FINE_LOCATION
アクセス許可を付与し、最初に位置情報を有効にすることに同意したが、後で位置情報を無効にした場合、そのフローはどのように機能するはずですか。ユーザーに位置情報サービスを有効にするように求めるワンタップの案件ダイアログを作成するにはどうすればよいですか (許可ダイアログについては言及していません)。Google マップ アプリは、システム提供のダイアログと思われるダイアログを使用します。ただし、ドキュメントが見つかりません。
これに関する任意の回答、考えをいただければ幸いです。
また、修正が必要な場合は、反対票を投じるのではなく、コメントを残してください。
ありがとう!