Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
2-й курс/Закрытая зона
Обновлено 8 сентября 2023
Запускаем встроенный диктофон
MediaRecorder
Создаём собственный диктофон
AudioRecord
Для начала попробуем запустить встроенный диктофон. Несмотря на то, что в эмуляторе нет значка приложения "Диктофон", он там есть. И мы можем запустить его с помощью намерения. Добавим на экран активности кнопку для запуска приложения и напишем код.
// Kotlin
class MainActivity : AppCompatActivity() {
private val RQS_RECORDING = 1
private var savedUri: Uri? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button: Button = findViewById(R.id.button)
button.setOnClickListener {
val intent = Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION)
startActivityForResult(intent, RQS_RECORDING)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == RQS_RECORDING) {
if(data?.data != null){
savedUri = data.data
println("Saved url: ${savedUri?.path}")
}
}
}
}
// Java
final static int RQS_RECORDING = 1;
Uri savedUri;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button recordButton = findViewById(R.id.buttonRecord);
recordButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(
MediaStore.Audio.Media.RECORD_SOUND_ACTION);
startActivityForResult(intent, RQS_RECORDING);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RQS_RECORDING) {
savedUri = data.getData();
Toast.makeText(MainActivity.this,
"Saved: " + savedUri.getPath(), Toast.LENGTH_LONG).show();
}
}
Запустив приложение "Диктофон", вы можете записать сообщение и закрыть программу. Путь к файлу с аудиоданными вернётся в вашу программу через метод onActivityResult() и будет представлять строку типа external/audio/media/382. Вы можете поискать созданный файл в папке SD-карты. Этот способ работает на эмуляторе, а на обычных устройствах диктофон может и не вернуть данные. А на некоторых устройствах может не оказаться диктофона.
В любом случае у вас возникнут трудности с доступом к созданным файлам, так как вы не принимаете участия в процессе создания файла. Вам надо потрудиться, чтобы разобраться, как хранятся файлы, записанные в системном приложении.
Класс android.media.MediaRecorder позволяет делать записи записи медиафрагментов, включая аудио и видео. MediaRecorder действует как конечный автомат. Вы задаёте различные параметры, такие как устройство-источник и формат. После установки запись может выполняться как угодно долго, пока не будет остановлена.
Сначала определимся с источником (свойство MediaRecorder.AudioSource):
Если указанный источник не поддерживается текущим устройством, то будет использован микрофон по умолчанию.
Далее определимся с форматом записываемого звука (свойство MediaRecorder.OutputFormat):
Определимся с сжатием звука (свойство MediaRecorder.AudioEncoder).
Указываем путь к файлу, в котором будут сохранены аудиоданные (метод setOutputFile())
Подготавливаем и запускаем запись (методы prepare() и start()). Остановить запись можно при помощи метода stop().
Напишем простейший диктофон для записи мяуканья кота на микрофон.
Вы вошли на сайт, как гость.
Необходимо зарегистрироваться, чтобы прочитать статью