保存文件和外部存储

Saving files and external storage

我的理解是否正确,在Android,如果你想save/persist你用相机拍摄的图像,你只能先在外部存储上创建图像?如果不存在外部存储,那你就不走运了?但是假设存储确实存在,我可以在拍摄照片后随时将其移动到任何我想要的地方(包括私人内部存储)?

这取决于你"images that you take with the camera"的意思。

如果您直接使用相机 API(例如 android.hardware.Camera),或者在您的应用中使用直接使用相机 API 的库,您应该能够将图像存储在 internal storage 没有问题。

如果您尝试使用 ACTION_IMAGE_CAPTUREyou are at the mercy of whatever third-party camera app handles the request。一种方法是只要求缩略图,使用简单的 ACTION_IMAGE_CAPTURE Intent,但图像将是缩略图大小的。但是,您通过对结果 Intent 的额外操作获得 Bitmap,并且您可以将其写入内部存储。

欢迎您使用 EXTRA_OUTPUTcontent: Uri,指向您应用中的 ContentProvider。理想情况下,这是可行的,并且您的 ContentProvider 将获取图像并将其保存到内部存储器。而且我认为某些相机应用程序可以正确处理此问题。但是,我也希望:

  • 一些相机应用无法识别 content: 方案,try to use the path as a file,并崩溃

  • 一些相机应用无法识别 content: 方案,try to use the path as a file,失败,捕获异常,并忽略你的 EXTRA_OUTPUT

  • 一般要忽略的一些相机应用EXTRA_OUTPUT

  • 一些相机应用程序在其 ACTION_IMAGE_CAPTURE 处理中存在其他错误,这些错误会干扰您的应用程序

ACTION_IMAGE_CAPTURE本质上是不可靠的。尝试很容易,但由于相机应用程序错误,它不会 100% 有效。仅当您可以告诉用户它不起作用时才使用它 ¯\_(ツ)_/¯

And if no external storage exists, then you're out of luck?

如果用户没有 external storage,他们的问题 比您的应用无法正常工作 大得多。

But assuming the storage does exist, I can always move it to wherever I want (including the private internal storage) after the photo has been taken?

"Always" 是关于 ACTION_IMAGE_CAPTURE 的有力声明。比方说,如果你得到一张保存在外部存储上的图片,如果你有使用外部存储的权限,那么你可以移动它到内部存储。