Android图像在Nexus S上使用原生相机应用程序无法保存

3
很奇怪,因为在我测试的三个设备中,只有Google Nexus S 4.0.3存在这个问题。我正在启动本机相机应用程序来拍照,但我不关心图像保存到哪里,所以没有指定位置,希望它会保存到默认位置,但是根本没有保存任何位置!在Galaxy S2和Samsung Skyrocket(都是2.3.x版本)上运行良好。下面是我用于启动应用程序的代码。
Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camIntent, TAKE_PHOTO);
return true;

我尽量保持简单易懂,但还是有些困惑!有人知道 Nexus S 相机的特殊问题吗?
编辑:看起来 Nexus S 的相机应用程序会在 onActivityResult 中保存文件,因为我启动了本地相机应用程序并没有在返回时保存图像,所以它不会保存。有人知道这是否属实?有见过这种行为吗?
编辑:没有人见过这个问题吗?我很难相信我是第一个遇到这个问题的人...
编辑:好吧,在继续努力后,我尝试将 URI 添加到意图的 EXTRA_OUTPUT 中,就像这样:
camIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.parse(folderPath + String.format("%d.jpg", System.currentTimeMillis())));

现在我看到了这里描述的行为:Android ACTION_IMAGE_CAPTURE Intent,当我点击“确定”时,相机应用程序没有任何反应,事先创建文件也不起作用,我试过像这样:

File f = new File(folderPath, filename);
f.createNewFile();
camIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse(folderPath + filename));

请检查上述链接,可能会有所帮助。问题可能是由于文件名或路径(最好不要包含特殊字符,如空格)引起的。 - Satish
1个回答

2

好的,我理解了。奇怪的是,我不知道为什么,但是更改这一行代码:

camIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.parse(folderPath + filename));

为了

camIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));

问题已经解决。虽然不知道为什么,但是它现在可以工作了。我试过无数种方式...

如果根本没指定 EXTRA_OUTPUT -> 相机会表现得好像一切都很好... 除了它不会在任何地方保存图像

通过 intent.getExtras().get("data") 获取位图 -> 的确返回了一个位图,但它不是完整大小的图像,这在许多错误报告中有详细说明

使用上述 Uri.parse 方法 -> 导致原生相机应用程序的勾选按钮在单击时不起作用

希望这能帮助到某些人。


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