Как сохранить звук из ресурсов / сырья на внутреннюю SD-карту [Android]

Проблема в том, что при первом запуске моего приложения я загружаю некоторые изображения из папки drawable, а затем помещаю их в свое хранилище с помощью этой функции:

1- я сначала делаю их как растровые

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.autobus);

а затем я конвертирую их с помощью этой функции

private String saveToInternalSorage(Bitmap bitmapImage, String imagename) throws IOException{
    ContextWrapper cw = new ContextWrapper(getApplicationContext());
     // path to /data/data/yourapp/app_data/imageDir
    File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
    // Create imageDir
    File mypath=new File(directory,imagename);

    FileOutputStream fos = null;
    try {           
        fos = new FileOutputStream(mypath);
   // Use the compress method on the BitMap object to write image to the OutputStream
        bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
    } catch (Exception e) {
          e.printStackTrace();
    } finally {
          fos.close(); 
    } 
    return directory.getAbsolutePath();
}

Но теперь мне нужно сделать то же самое для звука, мне нужно сохранить звуковые поля в необработанном разделе во внутренней памяти, чтобы использовать их позже.

Так что, если кто-то может мне помочь, что будет с ним мягко, PS: я храню путь к этим файлам в своей базе данных SQLite.

1 ответ

Решение

Если вы используете InputStream для чтения, используйте OutputStream для записи, т. Е. BufferedOutputStream-обернутый FileOutputStream. Кроме того, ваш код довольно неэффективен, поскольку он копирует только один байт за раз. Я бы предложил создать буфер байтового массива и использовать эти соответствующие методы чтения / записи:

int BufferedInputStream.read(byte[] buffer, int offset, int length)void BufferedOutputStream.write(byte[] buffer, int offset, int length)

Для более подробной информации воспользуйтесь этой ссылкой, это поможет вам

Другие вопросы по тегам