2014年7月26日土曜日

Android : startActivityForResult がすぐ Activity.RESULT_CANCELED を返してしまう(もしくは ConnectionResult.startResolutionForResult が)

原因は、startActivityForResult を呼ぶ起動元の Activity の launchMode を singleInstance にしてしまっていた事でした。singleTask に変更して解決。

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleInstance" > <!--これ-->
    (...)
</activity>

launchMode については Y.A.M の雑記帳 : Android launchMode の違いに詳しく解説されているのでそちらを参照です。要するに、singleInstance の Activity はそれ単体でタスク(Activity のスタック)になるという設定なので、singleInstande のアクティビティから startActivityForResult を呼んで別の Activity を積むことができない、という事でした。

startActivityForResult で呼ぶ起動先のアプリが singleTask, singleInstance の場合も同じ問題が起こりそうです(singleTask, singleInstance のアクティビティはタスクのルートとなるので)。

Google Drive Android API を使おうとサンプルにそっていた際に、ConnectionResult.startResolutionForResult でこの問題に遭遇していたのでその辺りを探してしまっていましたが、問題はもっと基本的なところにありました。
無事、接続・認証の表示が出るようになり、これで先に進めそうです。

参考 : Android - startActivityForResult immediately triggering onActivityResult

0 件のコメント:

コメントを投稿