我正在爲練習製作音板,並且我想讓用戶能夠在菜單項上點擊下載聲音(我在應用程序中包含的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