Android-在编译时存储大型文件

Android-在编译时存储大型文件,android,storage,compile-time,Android,Storage,Compile Time,一个人究竟是如何在这个复杂的框架中完成如此简单的事情的 是的,我已经阅读了关于Android数据存储的文档,大约54.5遍。但是我找不到任何地方,文档描述了在编译时如何将文件放置在外部存储器上 下面是我想做的:我想在我的应用程序中包括几个(大的)(10-20mb)音频文件。当然,我不希望这些存储在内部存储器中,因为它们太大了。因此,将它们放在res/raw中不是一个选项(因为,如果我理解正确,res/raw中的东西将被放在手机的内部存储器中,对吗?) 文档中只声明“如果您想在编译时存储静态文件,

一个人究竟是如何在这个复杂的框架中完成如此简单的事情的

是的,我已经阅读了关于Android数据存储的文档,大约54.5遍。但是我找不到任何地方,文档描述了在编译时如何将文件放置在外部存储器上

下面是我想做的:我想在我的应用程序中包括几个(大的)(10-20mb)音频文件。当然,我不希望这些存储在内部存储器中,因为它们太大了。因此,将它们放在res/raw中不是一个选项(因为,如果我理解正确,res/raw中的东西将被放在手机的内部存储器中,对吗?)

文档中只声明“如果您想在编译时存储静态文件,请使用res/raw”。现在,如果安卓足够聪明,能够将这些文件单独放在外部存储器上,那么我永远是伟大的。。但不知何故,我对此表示怀疑。感谢所有帮助:) (抱歉,如果我看起来有一种态度,我只是在这么简单的事情上花了太多时间)

再次感谢:)

更新:我最终从应用程序下载了这些文件,而不是在安装时包含它们。谢谢你们的帮助

我在尝试通过url下载时遇到了一个问题,花了很多时间试图让它正常工作,最终问题是因为我没有在android清单文件中声明正确的权限!因此,对于希望在其应用程序中下载内容的任何人,不要忘记在android清单中设置权限,以下是我需要的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>


将这些文件放在标签开头上方

如果您的大文件在APK中,它们将存储在存储APK的任何位置-这可以是内部的,也可以是外部的,而这似乎不是您想要的。您最可能的选择似乎是将文件放在网站上,在应用程序的第一次运行期间,它必须注意到文件不存在,并在安装后检索它们

如何在编译时将文件放入外部存储器

我假设上面是一个输入错误,您的意思是在安装时

至于您的要求-在安装过程中,无法指示Android应用程序管理器将APK的不同部分解压缩到不同的位置

除此之外,无法保证APK下载将进入内部或外部内存存储(除非另有删除,否则将保留)

更进一步说,即使一台设备有外部存储器,也不能保证它在安装时可用或有足够的可用空间

在这一点上,我想知道10-20MB大小的音频文件——要么很长(持续时间),要么以高比特率编码。如果是后者,那么这就没有太多意义,因为大多数移动设备的音频复制(相对而言)相当差…只是一些需要仔细考虑的想法


我个人认为mah关于安装后下载的建议可能是一个更好的方法,但我关于外部存储可用性的评论仍然是正确的。

在Android上解决问题的正确方法是“不要将它们与应用程序放在一起”。只需在第一次启动时从web服务器(使用HTTP客户端API)下载这些文件,或者,如果这些文件将独立于应用程序本身进行升级,则将它们作为单独的“应用程序”准备,供用户通过Market下载

你的目标是什么API级别?啊,好的。。。谢谢你的建议。您有关于如何检测“首次跑步”的提示吗?。。或者我应该只是粗略地检查文件是否每次都存在?您已经解决了这个问题,但作为对您问题的回答,我建议每次都检查文件是否存在--这样做可以让您在用户更换外部存储时处理其他方法(如使用“SharedPrefs”)无法更换的情况。是的,它们很长。我已经设法降低了比特率,所以它们现在是4-5MB。。尽管如此,包括其中两个,您已经准备好使用20-30 mbs,因此问题仍然存在。:)感谢http客户端API提示,我一定会研究它!