当我在Samsung上调用startActivityForResult(new Intent(getActivity(), VkAuth.class), VK_ID);
时(在HTC和Nexus上一切正常),在创建VkAuth活动之前,会调用具有requestCode==VK_ID和结果代码0(Cancelled)的onActivityResult
父"活动"具有android:launchMode="singleInstance"
。startActivityForResult
是从附加到父Activity的片段中调用的。记录
E/AuthenticationFragment: vkLogIn
E/AuthenticationFragment: startActivityForResult 9101
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/MainActivity: onActivityResult before super: request - 271245, result - 0
E/AuthenticationFragment: request - 9101, result - 0
E/MainActivity: onActivityResult after super: request - 271245, result - 0
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/VkAuth: onCreate
E/VkAuth: onResume
在我删除android:launchMode="singleInstance"后,这个错误行为停止了
我在运行Android 4.4.2 API 17的三星Galaxy S4上也有类似的行为。我开始了一项活动:
Intent intent = new Intent(this, MyActivity.class);
startActivityForResult(intent, CUSTOM_CODE);
然而onActivityResult
立即被resultCode=0
(ACTIVITY.RESULT_CANCELED
)调用。它在其他设备上运行得非常好。
根据@Yagh的说法,我查看了AndroidManifest,发现执行startActivityForResult
的Activity有android:launchMode="singleInstance"
。
删除这条线路无疑解决了问题。
您还没有发布足够的代码让我们真正了解发生了什么,但我会检查以下内容:
当您从刚开始使用startActivityForResult
的活动返回时,请检查您是否有setResult
到RESULT_OK
:
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);