我正在为练习制作音板,并且我想让用户能够在菜单项上点击下载声音(我在应用程序中包含的res/raw
文件夹中),但我只能找到有关从互联网网址,而不是我已经包含在apk中的东西。从我的res/raw文件夹下载(复制?)一个文件到默认的Android下载位置?
这样做的最好方法是什么?如果可能的话,我想给他们选择保存到SD卡上。在文档中使用正确类的一点是非常棒的!我一直在使用谷歌搜索无济于事。
谢谢!
我正在为练习制作音板,并且我想让用户能够在菜单项上点击下载声音(我在应用程序中包含的res/raw
文件夹中),但我只能找到有关从互联网网址,而不是我已经包含在apk中的东西。从我的res/raw文件夹下载(复制?)一个文件到默认的Android下载位置?
这样做的最好方法是什么?如果可能的话,我想给他们选择保存到SD卡上。在文档中使用正确类的一点是非常棒的!我一直在使用谷歌搜索无济于事。
谢谢!
尝试是这样的:
public void saveResourceToFile() {
InputStream in = null;
FileOutputStream fout = null;
try {
in = getResources().openRawResource(R.raw.test);
String downloadsDirectoryPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
String filename = "myfile.mp3"
fout = new FileOutputStream(new File(downloadsDirectoryPath + filename));
final byte data[] = new byte[1024];
int count;
while ((count = in.read(data, 0, 1024)) != -1) {
fout.write(data, 0, count);
}
} finally {
if (in != null) {
in.close();
}
if (fout != null) {
fout.close();
}
}
}
这看起来像是我需要的 - 如果手机中没有SD卡,请将此下载文件下载到默认的下载文件夹中?或者getExternalStorageDirectory()只是找到他们在手机上设置的任何存储区域?谢谢! – shanling 2015-03-02 19:39:19
是的,它会'下载'到下载文件夹中(可能会有所不同),但这只是一个基本示例,您可能想要检查SD卡是否可写等。顺便说一句,有一个完整的代码示例android开发者网站[here](http://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory%28java.lang.String%29),这可能比这更好。 – JonasCz 2015-03-02 19:49:10
这是一个伟大的人。谢谢一堆:-) – shanling 2015-03-02 21:27:48
我不知道raw
,但我在我的应用程序中使用assets
文件夹做了类似的事情。我的文件在assets/backgrounds
文件夹下,你可以从下面的代码中猜到。 (我知道我只有4个文件,这就是为什么我有i
从0到4,但你可以改变它为任何你想要的)。你可以修改这个代码并使它为你工作(我知道我将只有4个文件,这就是为什么我有i
从0到4,但你可以改变这个为你想要的)。
该代码将从prefix_
(如prefix_1.png,prefix_2.png等)开始的文件复制到我的缓存目录中,但显然可以更改要将资产保存到的资源的扩展名,文件名或路径。
public static void copyAssets(final Context context, final String prefix) {
for (Integer i = 0; i < 4; i++) {
String filename = prefix + "_" + i.toString() + ".png";
File f = new File(context.getCacheDir() + "/" + filename);
if (f.exists()) {
f.delete();
}
if (!f.exists())
try {
InputStream is = context.getAssets().open("backgrounds/" + filename);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
FileOutputStream fos = new FileOutputStream(f);
fos.write(buffer);
fos.close();
} catch (Exception e) {
Log.e("Exception occurred while trying to load file from assets.", e.getMessage());
}
}
}
这是很容易的,刚才写的答案... – JonasCz 2015-03-02 19:29:18
只是谷歌的'从RES复制文件/生到sdcard'。 – greenapps 2015-03-02 19:29:49