安卓:相册意图返回resultCode == RESULT_CANCELED

6

我正在启动一个意图从图库中选择图片,但是意图总是返回结果码RESULT_CANCELED。我尝试了很多不同的代码,但都没有帮助,这让我觉得可能我漏掉了什么,比如在Android清单文件中的活动中添加了什么?

我的代码:

// The Intent
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 0);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK){
        Uri targetUri = data.getData();
        Bitmap bitmap;
        try {
            bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
            profileImage.setImageBitmap(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

请将您的activity的finish()代码放在其中。 - Sunil Pandey
你的意思是在startActivityForResult之后加上finish()吗?但这样做只会结束当前活动(我不想要这个),并且返回的结果仍然是RESULT_CANCELED。 - DecodeGnome
2个回答

20

好的,我解决了这个问题。我的问题是onActivityResult()方法在相册意图未完成之前被调用。我在这里找到了解决方案:onActivityResult() called prematurely

基本上,我在清单中指定了活动为"singleTask"。将其更改为"singleTop"对我有帮助。


1
当我的活动启动模式为“singleInstance”时,我遇到了同样的问题。将其更改为“singleTop”解决了我的问题。感谢您分享您的解决方案。 - Hang Guan
发送邮件时出现问题。 - Trikaldarshiii
这并没有解决我的问题。这个SO答案https://dev59.com/MF8e5IYBdhLWcg3wq79K#25492138对我也不起作用。在4.0、5.0和5.1上进行了测试。 - Shubham A.
谢谢亲爱的,你的解决方案对我很有用。我之前使用了“singleInstance”,但改为“singleTop”后一切正常了。 - satvinder singh
1
对我没有用,我的解决方案是删除 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - Raphael Royer-Rivard

1

这拯救了我的生命!\0/

android:launchMode="singleTop"

翻译为:单顶部启动模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接