所以这有点奇怪,因为在我测试的三台设备中,我只在装有 4.0.3 的 Google Nexus S 上遇到这个问题。我正在启动原生相机应用程序拍照,我不关心图像保存到哪里,所以我没有指定,希望它会保存到默认位置,但没有保存位置全部!
在 Galaxy S 2 和 Samsung Skyrocket(均采用 2.3.something)上运行良好。
我用来启动应用程序的代码
Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camIntent, TAKE_PHOTO);
return true;
我保持它非常简单,这就是我感到困惑的原因!有谁知道 Nexus S 相机的任何特定问题?
编辑: Nexus S 的相机应用似乎将文件保存在某些 onActivityResult 中,并且由于我启动了 native 相机应用并且在返回时不保存图像,所以它不会保存它。有谁知道这是真的吗?看到这种行为了吗?
编辑:没有人见过这个?我很难相信我是第一个遇到这个问题的人......
编辑:好吧,在进一步处理之后,我尝试将 URI 添加到 Intent 的 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));
最佳答案
好吧,明白了。奇怪的是,我不知道为什么,但改变这一行:
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 方法 -> 导致原生相机应用复选标记按钮在被点击时不做任何事情
希望这对某人有帮助..
关于在 Nexus S 上使用 native 相机应用程序无法保存 Android 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937659/