2011-08-28 89 views
0

在这个精美的过度复杂的框架中,人们究竟如何去做这么简单的事情?Android-在编译时存储大文件

是的我已阅读关于Data Storage for Android的文档,大约54.5次。但是我找不到任何文档描述应该如何在编译时将文件放置在外部存储上的地方。

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

该文档仅说明“如果您想要在编译时存储静态文件,请使用res/raw“。现在,如果Android足够聪明,可以将这些文件全部放在外部存储设备上,那么我永远都很棒。但不知何故,我对此表示怀疑。所有的帮助表示赞赏:) (很抱歉,如果它看起来像我有一个态度,我刚刚花了太多的时间在这么简单的东西)再次

谢谢:)

更新:我结束了下载来自应用程序的文件,而不是在安装时包含它们。谢谢你们的帮助!

我在尝试通过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> 

将这些标签

+0

你定位了什么API级别? –

+0

API等级10 ... – Mnightmare

回答

0

开始上述如果您的大文件在APK中,那么它们将存储在APK存储的任何位置 - 这可以是内部或外部的,而且看起来这不是您想要的。对于您来说,最可能的选择似乎是将文件放在网站上,并且在第一次运行应用程序时,必须注意文件不存在并在安装后检索它们。

+0

啊,好的......感谢您的建议。你有关于如何检测“首次运行”的提示吗?或者我应该粗略地检查文件是否每次都存在? – Mnightmare

+0

谢谢,看我的帖子,我最终做了什么! – Mnightmare

+0

您已经解决了这个问题,但是为了回应您的问题,我会建议您检查文件是否每次都存在 - 这样做可以让您处理用户已将其外部存储替换为其他方法(如使用'SharedPrefs')不会。 – mah

0

你应该如何去把文件上的外部存储在编译时

我假设上面是一个错字,你的意思是在安装时

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

除此之外,不能保证APK下载将转到内部或外部存储器(它将保留,除非另行删除)。

甚至更​​进一步,即使设备具有外部存储器,它也不能保证即使设备具有外部存储器,也可以在安装时提供或有足够的可用空间。

在这一点上,我想知道大小为10-20MB的音频文件 - 无论是非常长(持续时间)还是以高比特率进行编码。如果是后者,那么这并没有多大意义,因为大多数移动设备的音频再现效果相当差(相对来说)......只是有些想法可以仔细考虑。

我个人认为,麻将的下载安装后建议可能是一种更好的方法,但我对于外部存储可用性的评论仍然适用。

+0

是的,他们很长。我已经设法降低了比特率,所以他们现在在4-5 mb ..仍然,包括其中几个,你已经准备好了20-30 mbs,所以问题依然存在。 :) – Mnightmare

0

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

+0

感谢您的HTTP客户端API提示,我一定会考虑它! – Mnightmare