Воспроизведение звука на кнопку нажмите 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;
}



}
627   7  

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

    Ничего не найдено.