gpt4 book ai didi

android - 将文件与 Android 应用程序 bundle 在一起,并允许稍后进行额外下载

转载 作者:搜寻专家 更新时间:2023-11-01 08:58:22 24 4
gpt4 key购买 nike

我有一个应用程序附带了一堆小图像(大约 200 张图像)(总大小约为 10MB),以在不同情况下显示在屏幕上。当用户按下某个按钮时,将显示这些图像之一(可以是其中任何一个)。将来可能会随时添加更多图像,因此应用程序会检查服务器上的 xml 文档(如果距离上次检查至少 24 小时,则此检查在主要 Activity 的 onCreate() 中完成)。 xml 文档列出了所有图像,因此很容易检查文档是否已更改以及是否添加了新图像。如果添加了更多图像,应用将从服务器下载这些图像,并将它们与设备上已有的图像一起存储。

我的第一个想法是将 10MB 的图像与应用程序 bundle 在一起,将它们放在 Assets 文件夹中,应用程序第一次启动时,图像将从 Assets 文件夹移动到内部存储。然后如果以后要添加更多的图片,它们也会被下载并保存在内部存储中,所以所有的图片都很好地拼凑在一起,但是经过一些实验,我发现需要很多时间设备的时间(在 HTC One S 和 Android 4.1 上测试)只是列出 Assets 文件夹中的图像(超过一分钟),不要介意实际复制它们。这是 Not Acceptable ,因为我不希望用户第一次体验该应用程序时等待超过一分钟。

我正在使用 AssetManager 类的 list(String path) 方法来列出文件。

所以我想我的问题是:

您将如何以某种方式实现这一点,以便用户不必在首次启动时等待很长时间,并且该应用仍然能够即时下载更多图像?

最佳答案

我有类似的情况,我将所有文件压缩到一个 zip 中并将其存储在 res/raw 文件夹中。然后在第一次启动时,我将所有文件提取到应用程序的内部存储空间。

public static void unzipFiles(Context context, int file) {
InputStream stream;

context.getFilesDir().mkdirs();
String path = context.getFilesDir().getAbsolutePath();

try {
stream = context.getResources().openRawResource(file);
if (stream == null) {
throw new RuntimeException("Cannot load " + file + " file from raw folder");
}

ZipInputStream zis = new ZipInputStream(stream);
ZipEntry entry;

while ((entry = zis.getNextEntry()) != null) {
if (entry.isDirectory()) {
File f = new File(path, entry.getName());
if (!f.exists()) {
f.mkdirs();
}
} else {
int size;
byte[] buffer = new byte[2048];

File f = new File(path, entry.getName());
FileOutputStream fos = new FileOutputStream(f);
BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length);

while ((size = zis.read(buffer, 0, buffer.length)) != -1) {
bos.write(buffer, 0, size);
}
bos.flush();
bos.close();
}
}

} catch (IOException e) {
throw new RuntimeException("Cannot unzip '" + file + "'", e);
}

}

关于android - 将文件与 Android 应用程序 bundle 在一起,并允许稍后进行额外下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17218697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com