Как сохранить звук в папку Download внутренней памяти

У меня есть дека с рядом звуков, содержащихся в папке Raw. Каждая кнопка соответствует звуку, воспроизводимому при нажатии.

Я хотел бы долго нажимать на звук и сохранять этот файл .mp3 в папку «Загрузки» в памяти телефона. В моем телефоне нет возможности SD-карты, поэтому он будет только во внутреннюю память.

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

Кто-нибудь может помочь, пожалуйста? Я прикрепил часть своего кода ниже на случай, если это необходимо. Большое спасибо.

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_second);

            Button a;

            a = findViewById(R.id.button11);

           final String path = Environment.getExternalStorageDirectory().getPath()
                    + "/media/audio/";

            a.setOnLongClickListener(new View.OnLongClickListener() {
                public boolean onLongClick(View arg0) {

                    try {
                        copyRAWtoPhone(R.raw.addressmeassir, path);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    return true;
                }

                private void copyRAWtoPhone(int id, String path) throws IOException {

                    InputStream in = getResources().openRawResource(id);
                    FileOutputStream out = new FileOutputStream(path);
                    byte[] buff = new byte[1024];
                    int read = 0;
                    try {
                        while ((read = in.read(buff)) > 0) {
                            out.write(buff, 0, read);
                        }
                    } finally {
                        in.close();
                        out.close();
                    }


                }
            });
0
0
215
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сохранение в папку Download:

 val file = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), name)
  if (writeToFile_1(Objects.requireNonNull<ResponseBody>(response.body()), file)) {
   Toast.makeText(context.applicationContext, "File was downloaded.", Toast.LENGTH_SHORT).show()
   } else {
   Toast.makeText(context.applicationContext, "Error.", Toast.LENGTH_SHORT).show()
}

и создание файла:

private fun writeToFile_1(body: ResponseBody, file: File): Boolean {
        var inputStream: InputStream? = null
        var outputStream: OutputStream? = null
        try {
            inputStream = body.byteStream()
            outputStream = FileOutputStream(file)

            val buffer = ByteArray(4096)
            while (true) {
                val read = inputStream.read(buffer)
                if (read < 0) break
                outputStream.write(buffer, 0, read)
            }
            outputStream.close()
            return true
        } catch (e: IOException) {
            e.printStackTrace()
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close()
                } catch (e: IOException) {
                    e.printStackTrace()
                }

            }
            if (outputStream != null) {
                try {
                    outputStream.close()
                } catch (e: IOException) {
                    e.printStackTrace()
                }

            }
        }
        return false
    }

Я использую этот метод для сохранения файлов с сервера, но вы можете написать и другой byte[] Надеюсь, вы уловили основную идею моего метода. Вы должны получить byte[] своего звука, а затем записать в файл с помощью моего метода. Удачи :)

Привет. Спасибо за вашу помощь. Я боюсь сказать, что это не работает для меня, и я не уверен, что полностью понимаю.

Velociholmes 28.05.2019 14:47

Привет. Да, многочисленные. Где я могу разместить ваш код для создания файла? Буду ли я помещать его в setonclicklistener, который я настроил для своей кнопки? Спасибо.

Velociholmes 28.05.2019 15:09

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