3

好吧,我尝试了很多东西,但我实现的更好目标是将所需文件复制到 sd,但新文件大小始终为 0bytes :(

这是我的代码:

        String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        String fileName = sonidoActual+".mp3";

        File newSoundFile = new File(baseDir, fileName);
        Uri mUri = Uri.parse("android.resource://com.genaut.ringtonelists/raw/"+sonidoActual);
        AssetFileDescriptor soundFile;
        try {
            soundFile= getContentResolver().openAssetFileDescriptor(mUri, "r");
        } catch (FileNotFoundException e) {
            soundFile=null;   
        }

        try {
            byte[] readData = new byte[1024*500];
            FileInputStream fis = soundFile.createInputStream();
            FileOutputStream fos = new FileOutputStream(newSoundFile);
            int i = fis.read(readData);
            while (i != -1) {
                fos.write(readData, 0, i);
                i = fis.read(readData);
                Log.d("Degug - While: ", "i: "+i);
            }
            fos.flush();
            fos.close();
        } catch (IOException io) {
        }

对不起我的英语不好。有人知道这个问题吗?非常感谢!

我的清单上有这些权限:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

更多信息:我尝试了一些代码来复制文件assets但不起作用..我有一些应用程序可以很好地设置铃声,所以我不认为我的 SD 有问题..我感到绝望:S

这些是资产中的代码,显然工作正常:https ://stackoverflow.com/a/4530294/1422434


我也尝试过getResources.openRawResource():但不起作用

    String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = nombreActual+".mp3";

File newSoundFile = new File(baseDir, fileName);

try {
    byte[] readData = new byte[1024*500];
    InputStream fis = getResources().openRawResource(contexto.getResources().getIdentifier(sonidoActual,"raw", contexto.getPackageName()));
    FileOutputStream fos = new FileOutputStream(newSoundFile);
    int i = fis.read(readData);

    while (i != -1) {
        fos.write(readData, 0, i);
        i = fis.read(readData);
    }

    fos.close();
} catch (IOException io) {
}
4

1 回答 1

2

当您使用原始文件夹时,只需从您的活动中使用它:

getResources().openRawResource(resourceName)
于 2012-08-05T15:44:11.047 回答