これは、アクティビティの開始と停止の間の状態を維持することで処理できます。
このサンプル コードmIsResolving
での変数の使用を参照してください。が呼び出されたときに保留中のダイアログが既に存在するかどうかを保存し、で復元します。存在する場合は、API を再度呼び出すことを防ぎます。目的のために受信した状態を一度クリアします。onSaveInstanceState()
onCreate()
onActivityResult()
private void resolveResult(Status status, int requestCode) {
// We don't want to fire multiple resolutions at once since that can result
// in stacked dialogs after rotation or another similar event.
if (mIsResolving) {
Log.w(TAG, "resolveResult: already resolving.");
return;
}
if (status.hasResolution()) {
try {
status.startResolutionForResult(MainActivity.this, requestCode);
mIsResolving = true;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
mIsResolving = savedInstanceState.getBoolean(KEY_IS_RESOLVING);
}
...
@Override
protected void onSaveInstanceState(Bundle outState) {
...
outState.putBoolean(KEY_IS_RESOLVING, mIsResolving);
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
...
mIsResolving = false;
...
これは多くのアプリに共通する落とし穴であるため、Play Services レイヤーでこの状態をサポートできるかどうかを検討しますが、現時点では、アクティビティにブール値を使用することが、解決状態を維持するための現在の一般的な推奨事項です。