3

さて、私は多くのことを試みましたが、私が達成するより良い目標は、目的のファイルをsdにコピーすることですが、新しいファイルサイズは常に0バイトです:(

これは私のコードです:

        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

rawフォルダーを使用しているので、アクティビティからこれを使用するだけです。

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