Воспроизведение звука на кнопке нажмите 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() который содержит, какие инструкции кнопка должна делать on click.

public void onClick(View v) {
    mp.start();
}

для воспроизведения звука, мы называем медиаплеера 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

Так играть безопасный и простой код для использования медиа-плеер.

В воспроизведение нескольких звуков в одном действии / фрагменте просто измените размер при создании нового медиаплеера, например

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 = медиаплеер.create (this, R. raw.xxx);

наконец запустите метод start в этом классе

mp.start();

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