我想使用发送方式发送使用我的应用创建的图像。 我查看了许多此类意图的示例,并注意到他们都使用外部存储来存储将使用意图发送的临时图像文件。
是否有使用外部存储的具体原因? 它看起来像一个危险的选择,因为如果没有安装外部存储器,用户将无法将图像发布到网络上,这感觉相当奇怪。
此外,您会在哪里保存应用的工作数据?在onPause()中,我正在保存用户在内部存储中处理的当前图像,但是您建议将其存储在外部存储中吗?
答案 0 :(得分:2)
这很常见,因为图像可能相当大。在某些设备中,内部存储有点宝贵(因此Apps2SD的普及)。此外,有时您可能希望应用程序外的用户可以访问这些图像。如果它真的只是暂时的,您应该考虑使用getCacheDir()
或getExternalCacheDir()
。
有关存储的信息,请参阅this doc。该文档中有code,用于查看外部存储空间是否可用,如果您想使用内部存储空间和后备存储空间。
哦,在你的场景中,主要原因只是你的应用程序只能访问你的内部存储空间。如果发送意图是针对不是您的应用的组件,则它将无法访问您的内部存储区域。
答案 1 :(得分:1)
原因是Android中的IPC数据存在限制 - 大约1MB。这意味着如果你在意图的额外内容中添加了更多内容,那么当你尝试使用这个意图启动一个活动时,你会收到一个错误。因此,通过意图传递图像的唯一方法是将指针(URL,文件名)传递给实际图像。由于私有文件仅对您的应用程序可见,因此您必须存储到外部(共享)存储或传递内容提供程序URI(当然,您需要编写内容提供程序)。共享存储是更简单的方法。
答案 2 :(得分:0)
图像采用字节数组格式。当您直接发送时,可能需要时间(即,如果您在远程服务器上发送)。有时申请可能会挂起。因此,为了避免这种顺序编程,开发人员使用并行代码,这里一个代码将图像保存在存储设备中,另一个代码用于上传部分。
另一个好处是,直接发送可能导致数据丢失,而保存在外部存储上会阻止此类情况。