保存文件和外部存储

时间:2016-04-11 14:18:50

标签: android android-camera android-file

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

1 个答案:

答案 0 :(得分:1)

这取决于“你用相机拍摄的图像”的含义。

如果您直接使用相机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来请求缩略图,但图像将是缩略图大小的。但是,您通过结果Bitmap上的额外内容获得Intent,并且可以将其写入内部存储空间。

欢迎您使用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%的时间工作。只有当您能够告诉用户¯\_(ツ)_/¯何时不起作用时才使用它。

  

如果不存在外部存储,那么你运气不好?

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

  

但假设存储确实存在,我可以在照片拍摄后随时将其移动到我想要的任何地方(包括私人内部存储)?

“永远”是关于ACTION_IMAGE_CAPTURE的强烈声明。假设 if 你得到一张保存在外部存储器上的图片,如果你有权使用外部存储器,那么<​​em>然后就可以将它移到内部存储器了。 / p>