Воспроизведение звука на кнопку нажмите android
Как я могу получить кнопку для воспроизведения звука из raw при нажатии? Я только что создал кнопку с id 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;
}
}
7 ответов:
это самая важная часть кода, приведенного в исходном сообщении.
Button one = (Button) this.findViewById(R.id.button1); final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); one.setOnClickListener(new OnClickListener(){ public void onClick(View v) { mp.start(); } });чтобы объяснить шаг за шагом:
Button one = (Button) this.findViewById(R.id.button1);во-первых, это инициализация кнопки, которая будет использоваться при воспроизведении звука. Мы используем активность
findViewById, передавая идентификатор, который мы ему присвоили (в данном примере:R.id.button1), чтобы получить кнопку, которая нам нужна. Мы бросили его какButtonтак что легко назначить его переменнойoneчто мы инициализация. Объяснение того, как это работает, выходит за рамки этого ответа. этой дает краткое представление о том, как он работает.final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);это как инициализировать
MediaPlayer. Медиаплеер следует за Статический Метод Фабрики Шаблон. Чтобы получить экземпляр, мы называем егоcreate()метод и передать ему контекст и идентификатор ресурса звука, который мы хотим воспроизвести, в этом случаеR.raw.soho. Мы объявляем его какfinal. Джон Скит дал отличное объяснение, почему мы это делаем здесь.one.setOnClickListener(new OnClickListener(){ public void onClick(View v) { //code } });наконец, мы устанавливаем, что будет делать наша ранее инициализированная кнопка. Воспроизведение звука на кнопку нажмите! Для этого мы устанавливаем
OnClickListenerнаша кнопкаone. Внутри есть только один метод,onClick()который содержит какие инструкции кнопка должна делать клик.public void onClick(View v) { mp.start(); }чтобы воспроизвести звук, мы называем Mediaplayer's
start()метод. Этот метод запускает воспроизведение звука.теперь вы можете воспроизводить звук при нажатии кнопки в Android!
бонус:
как отмечено в комментарии нижеСпасибо Langusten Gustel Не!, а как рекомендуется в справочнике разработчика Android важно называть
release()метод для освобождения ресурсов, которые больше не будут использоваться. Как правило, это сделано после того, как звук, который будет воспроизводиться, завершил воспроизведение. Для этого мы добавляемOnCompletionListenerнашимmpвот так:mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { //code } });внутри
onCompletionметод, мы выпускаем его вот так:public void onCompletion(MediaPlayer mp) { mp.release(); }очевидно лучшие способы реализации этого. Например, вы можете сделать MediaPlayer переменной класса и обрабатывать его жизненный цикл вместе с жизненным циклом
FragmentилиActivityчто использует оно. Однако это тема для другого вопроса. Чтобы сохранить объем этого ответа небольшим, я написал его только для иллюстрации как играть звук на кнопку нажмите В Android.
Оригинальное Сообщение
первый. Вы должны поместить свои операторы внутри блока, и в этом случае метод onCreate.
второй. Вы инициализировали кнопку как переменную один, тогда вы использовали переменную ноль и установить его onClickListener к неполному onClickListener. Используйте переменную один для setOnClickListener.
в-третьих, поместите логику для воспроизведения звука внутри onClick.
в итоге:
import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; 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); final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); one.setOnClickListener(new OnClickListener(){ public void onClick(View v) { mp.start(); } }); } }
испытано и работает 100%
public class MainActivity extends ActionBarActivity { Context context = this; MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); mp = MediaPlayer.create(context, R.raw.sound); final Button b = (Button) findViewById(R.id.Button); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { if (mp.isPlaying()) { mp.stop(); mp.release(); mp = MediaPlayer.create(context, R.raw.sound); } mp.start(); } catch(Exception e) { e.printStackTrace(); } } }); } }
это было все, что мы должны были сделать
if (mp.isPlaying()) { mp.stop(); mp.release(); mp = MediaPlayer.create(context, R.raw.sound); }
лучший способ сделать это здесь я нашел после поиска одной проблемы за другой в LogCat
MediaPlayer mp; mp = MediaPlayer.create(context, R.raw.sound_one); mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub mp.reset(); mp.release(); mp=null; } }); mp.start();не освобождение медиаплеер выдает вам эту ошибку в LogCat:
Android: MediaPlayer доработан без освобождения
не сброс медиаплеер выдает вам эту ошибку в LogCat:
Android: mediaplayer went away with unhandled eventsТак играть безопасный и простой код для использования медиа-плеер.
To воспроизведение более одного звука в одном действии / фрагменте просто измените размер при создании нового медиаплеера, например
mp = MediaPlayer.create(context, R.raw.sound_two);и играть в нее !
удачи!
import android.media.MediaPlayer; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { MediaPlayer mp; Button one; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mp = MediaPlayer.create(this, R.raw.soho); one = (Button)this.findViewById(R.id.button1); one.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mp.start(); } }); } }
- звук должен быть помещен в
rawпапка, если она не существует, создать одно.- папка raw должна находиться внутри папки res
- имя не должно быть
-или специальные символы в нем.на вашей деятельности, вы должны иметь объект
MediaPlayerвнутриonCreateспособ илиonclickметод, вы должны инициализироватьMediaPlayer, какMediaPlayer.create(this, R.raw.name_of_your_audio_file), затем ваш аудиофайл ir готов к воспроизведению с вызовомstart(), в вашем случае, так как вы хотите, чтобы он был помещен в кнопку, вам придется поместить его внутрьonClickметод.пример:
private Button myButton; private MediaPlayer mp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.myactivity); mp = MediaPlayer.create(this, R.raw.gunshot); myButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mp.start(); } }); } }
Button button1=(Button)findViewById(R.id.btnB1); button1.setOnClickListener(new OnClickListener(){ public void onClick(View v) { MediaPlayer mp1 = MediaPlayer.create(this, R.raw.b1); mp1.start(); } });попробуйте это, я думаю, что он будет работать
public class MainActivity расширяет AppCompatActivity {
public void clickMe (View view) { MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx); mp.start(); }создать кнопку с методом может быть вызван при нажатии кнопки (oncCeate),
затем создайте переменную для класса (MediaPlayer) с путем вашего файла
MediaPlayer mp = MediaPlayer.создать (это, Р. raw.xxx);
наконец запустите метод start в этом классе
mp.start ();
файл будет работать при нажатии кнопки, надеюсь, что это было полезно!
Comments