Воспроизведение звука на кнопке нажмите 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();
файл будет работать при нажатии кнопки, надеюсь, это было полезно!