У меня есть дека с рядом звуков, содержащихся в папке 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();
}
}
});
Сохранение в папку 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[]
своего звука, а затем записать в файл с помощью моего метода. Удачи :)
Привет. Да, многочисленные. Где я могу разместить ваш код для создания файла? Буду ли я помещать его в setonclicklistener, который я настроил для своей кнопки? Спасибо.
Привет. Спасибо за вашу помощь. Я боюсь сказать, что это не работает для меня, и я не уверен, что полностью понимаю.