调取Android系统相机onActivityResult立即返回RESULT_CANCELED
分析原因:
singleInstance状态下,系统加载任何新的activity的时候都会将新的activity移到新的栈上,保持设置为singleInstance的activity所在栈里面只有该activity。因此当设置为singleInstance,使用 startActivityForResult 后,系统将新启动的activity移到新的栈上面,原来的栈上面原activity任然保持在栈顶,所以返回的resultCode就是CANCEL。因为其他栈上的activity不能将数据返回到该栈顶上的activity。
解决方案:
启动系统相机的时候 Intent 不使用 Intent.FLAG_ACTIVITY_NEW_TASK,防止新起的相机Activity与当前Activity不在同一个栈中。
if (Build.VERSION.SDK_INT >=24) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(getContext(), "com.bees.groupme.imgprovider", mTmpFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
}else {
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile));
}