Как заставить кнопку воспроизводить звук из raw при нажатии? Я только что создал кнопку с идентификатором button1
, но какой бы код я ни написал, все не так.
import android.media.MediaPlayer;
public class BasicScreenActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic_screen);
}
Button one = (Button)this.findViewById(R.id.button1);
MediaPlayer = mp;
mp = MediaPlayer.create(this, R.raw.soho);
zero.setOnCliclListener(new View.OnClickListener() )
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.basic_screen, menu);
return true;
}
}
MusicManager.getInstance().play(this, R.raw.my_sound);
. Если да, то эта библиотека может быть для вас: github.com/delight-im/Android-AudioОтветы:
Это самая важная часть кода, представленного в исходном посте.
Чтобы объяснить это шаг за шагом:
Во-первых, это инициализация кнопки, которая будет использоваться для воспроизведения звука. Мы используем Activity
findViewById
, передавая ему присвоенный нам идентификатор (в данном примере case :)R.id.button1
, чтобы получить нужную нам кнопку. Мы приводим его как a,Button
чтобы его было легко назначить переменной,one
которую мы инициализируем. Более подробное объяснение того, как это работает, выходит за рамки этого ответа. Это дает краткое представление о том, как это работает.Вот как инициализировать файл
MediaPlayer
. MediaPlayer следует шаблону разработки метода статической фабрики . Чтобы получить экземпляр, мы вызываем егоcreate()
метод и передаем ему контекст и идентификатор ресурса звука, который мы хотим воспроизвести, в данном случаеR.raw.soho
. Мы объявляем это какfinal
. Джон Скит прекрасно объяснил, почему мы делаем это здесь .Наконец, мы устанавливаем, что будет делать наша ранее инициализированная кнопка. Воспроизвести звук при нажатии кнопки! Для этого мы устанавливаем
OnClickListener
нашу кнопкуone
. Внутри есть только один метод,onClick()
который содержит инструкции, которые должна выполнять кнопка при нажатии .Чтобы воспроизвести звук, мы вызываем
start()
метод MediaPlayer . Этот метод запускает воспроизведение звука.Теперь вы можете воспроизводить звук при нажатии кнопки в Android!
Бонусная часть:
Как отмечено в комментарии ниже Спасибо, Лангустен Густель! , и, как рекомендовано в Справочнике разработчика Android , важно вызвать
release()
метод, чтобы освободить ресурсы, которые больше не будут использоваться. Обычно это делается после того, как воспроизводимый звук завершил воспроизведение. Для этого мы добавляемOnCompletionListener
к нашемуmp
подобному:Внутри
onCompletion
метода мы выпускаем его так:Очевидно, есть лучшие способы реализовать это. Например, вы можете сделать MediaPlayer переменной класса и обрабатывать ее жизненный цикл вместе с жизненным циклом того
Fragment
или,Activity
который его использует. Однако это тема для другого вопроса. Чтобы ограничить объем этого ответа, я написал его, чтобы проиллюстрировать, как воспроизводить звук при нажатии кнопки в Android .Исходный пост
Первый. Вы должны поместить свои операторы в блок, и в этом случае метод onCreate.
Второй. Вы инициализировали кнопку как переменную один , затем использовали нулевую переменную и установили для ее onClickListener неполный onClickListener. Используйте переменную one для setOnClickListener.
В-третьих, поместите логику для воспроизведения звука внутри onClick.
В итоге:
источник
RELEASE
Проверено и работает на 100%
Это все, что нам нужно было сделать
источник
Лучший способ сделать это здесь, я нашел после поиска одной проблемы за другой в LogCat.
Если не выпустить медиаплеер, в LogCat появится следующая ошибка:
Если не сбросить настройки медиаплеера, в LogCat вы получите следующую ошибку:
Так что не рискуйте и используйте простой код для использования медиаплеера.
Чтобы воспроизводить более одного звука в одном действии / фрагменте, просто измените resID при создании нового медиаплеера, например
и играй!
Радоваться, веселиться!
источник
источник
raw
папку, если ее нет, создайте ее.-
либо специальных символов.В вашей деятельности вам нужно иметь объект
MediaPlayer
внутриonCreate
метода илиonclick
метода, вы должны инициализироватьMediaPlayer
, напримерMediaPlayer.create(this, R.raw.name_of_your_audio_file)
, ваш аудиофайл, готовый к воспроизведению с вызовомstart()
, в вашем случае, поскольку вы хотите, чтобы он был помещенный в кнопку, вам нужно будет поместить его вonClick
метод.Пример:
источник
есть несколько предустановленных звуков: SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING.
Ницца!
использовать как:
источник
Попробуйте это, я думаю, это сработает
источник
создать кнопку с методом, который может быть вызван при нажатии кнопки (onCreate),
затем создайте переменную для класса (MediaPlayer) с путем к вашему файлу
наконец, запустите метод запуска в этом классе
файл запустится при нажатии кнопки, надеюсь, это было полезно!
источник
Вместо сброса, предложенного DeathRs:
мы можем просто сбросить MediaPlayer, чтобы он начал использовать:
источник
Все эти решения "звучат" красиво и разумно, но есть один большой недостаток. Что произойдет, если ваш клиент загрузит ваше приложение и несколько раз нажмет вашу кнопку?
Ваш
MediaPlayer
будет иногда не воспроизводить звук при нажатии на кнопку , чтобы много раз.MediaPlayer
Несколько дней назад я столкнулся с этой проблемой производительности в классе.Можно ли использовать
MediaPlayer
сохранение класса? Не всегда. Если у вас короткие звуки, лучше использоватьSoundPool
класс.Экономным и эффективным решением является класс SoundPool, который предлагает отличные функции и увеличивает производительность вашего приложения.
SoundPool не так прост в использовании, как его
MediaPlayer
класс, но имеет некоторые большие преимущества, когда дело касается производительности и надежности.Перейдите по этой ссылке и узнайте, как использовать класс SoundPool в своем приложении:
https://developer.android.com/reference/android/media/SoundPool
Youtube: Сохранить решение
источник
Краевой случай: почти каждый ответ почти правильный, но я застрял в крайнем случае. Если какой-либо пользователь нажимает кнопку случайным образом несколько раз в течение нескольких секунд, то после воспроизведения звука он больше не реагирует.
Причина: инициализировать
Mediaplayer
объект очень дорого. Он также имеет дело с ресурсами ( аудиофайлами ), поэтому для этого требуется некоторое время. Когда пользователи случайно инициализации и вызова методаMediaPlayer
методов «s , какstart()
,stop()
,release()
и т.д. может привести кIllegalStateException
которой я столкнулся.Решение: Спасибо caw за его предложение в комментарии об Android-Audio . В нем всего два простых класса Java (
MusicManager.java
,SoundManager.java
).Вы можете использовать,
MusicManager.java
если хотите проигрывать разовые звуковые файлы -Вы можете использовать,
SoundManager.java
если хотите часто и быстро воспроизводить несколько звуков -источник