Воспроизведение звука при нажатии кнопки мыши

Как получить кнопку для воспроизведения звука из 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; } } 

    Это самая важная часть кода, содержащегося в исходном сообщении.

     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 Activity, передавая идентификатор, который мы ему назначили (в данном примере: R.id.button1 ), чтобы получить R.id.button1 нам кнопку. Мы используем его как Button так что его легко назначить переменной, которую мы инициализируем. Объяснение того, как это работает, выходит за frameworks этого ответа. Это дает краткое представление о том, как это работает.

     final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); 

    Вот как инициализировать MediaPlayer . 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(); } 

    Чтобы воспроизвести звук, мы вызываем метод start() MediaPlayer. Этот метод запускает воспроизведение звука.

    Там вы можете играть звук при нажатии кнопки на 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 переменной classа и обработать его жизненный цикл вместе с жизненным циклом 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(); 

    Не выпуская Media Player, вы получаете эту ошибку в LogCat:

    Android: MediaPlayer завершился без выпуска

    Не сбрасывание медиаплеера дает вам эту ошибку в LogCat:

     Android: mediaplayer went away with unhandled events 

    Поэтому используйте безопасный и простой код для использования медиаплеера.

    Чтобы воспроизвести несколько звуков в одной и той же Деятельности / Фрагменте, просто измените идентификатор повторно при создании нового медиаплеера, например

     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 папку, если он не существует, создайте его.
    • Необработанная папка должна находиться внутри папки res
    • В имени не должно быть никаких - или специальных символов.

    В вашей деятельности вам нужно иметь объект MediaPlayer , внутри метода onCreate или метод onclick , вы должны инициализировать MediaPlayer , например MediaPlayer.create(this, R.raw.name_of_your_audio_file) , тогда ваш аудиофайл будет готов к в вашем случае, если вы хотите, чтобы он был помещен в кнопку, вам придется поместить его в метод 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(); } }); 

    Попробуйте это, я думаю, что это сработает

    открытый class MainActivity расширяет AppCompatActivity {

     public void clickMe (View view) { MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx); mp.start(); } 

    создать кнопку с помощью метода можно вызвать, когда нажата кнопка (oncCeate),

    затем создайте переменную для classа (MediaPlayer) с указанием пути к файлу

    MediaPlayer mp = MediaPlayer.create (это, R.raw.xxx);

    наконец, запустить метод запуска в этом classе

    mp.start ();

    файл будет запускаться при нажатии кнопки, надеюсь, что это было полезно!

    Давайте будем гением компьютера.