¿Cómo hago para que un botón reproduzca un sonido sin formato al hacer clic? Acabo de crear un botón con id button1
, pero sea cual sea el código que escriba, todo está mal.
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;
}
}
MusicManager.getInstance().play(this, R.raw.my_sound);
. Si es así, esta biblioteca podría ser para usted: github.com/delight-im/Android-AudioRespuestas:
Esta es la parte más importante del código proporcionado en la publicación original.
Para explicarlo paso a paso:
Primero está la inicialización del botón que se utilizará para reproducir el sonido. Usamos la actividad
findViewById
, pasando el Id que le asignamos (en el caso de este ejemplo :)R.id.button1
, para obtener el botón que necesitamos. Lo convertimos como aButton
para que sea fácil asignarlo a la variableone
que estamos inicializando. Explicar más sobre cómo funciona esto está fuera del alcance de esta respuesta. Esto le da una breve idea de cómo funciona.Así es como se inicializa un
MediaPlayer
. El MediaPlayer sigue el patrón de diseño del método de fábrica estático . Para obtener una instancia, llamamos a sucreate()
método y le pasamos el contexto y el Id del recurso del sonido que queremos reproducir, en este casoR.raw.soho
. Lo declaramos comofinal
. Jon Skeet proporcionó una gran explicación de por qué lo hacemos aquí .Finalmente, configuramos lo que hará nuestro botón previamente inicializado. ¡Reproduce un sonido al hacer clic en el botón! Para hacer esto, configuramos el
OnClickListener
de nuestro botónone
. En el interior hay solo un método,onClick()
que contiene las instrucciones que debe seguir el botón al hacer clic .Para reproducir el sonido, llamamos al
start()
método de MediaPlayer . Este método inicia la reproducción del sonido.Allí, ahora puedes reproducir un sonido al hacer clic en un botón en Android.
Parte de bonificación:
Como se indica en el comentario a continuación, ¡ Gracias Langusten Gustel! , y como se recomienda en la Referencia para desarrolladores de Android , es importante llamar al
release()
método para liberar recursos que ya no se utilizarán. Normalmente, esto se hace una vez que se ha completado la reproducción del sonido que se va a reproducir. Para hacerlo, agregamos unOnCompletionListener
a nuestro memp
gusta así:Dentro del
onCompletion
método, lo lanzamos así:Obviamente, hay mejores formas de implementar esto. Por ejemplo, puede hacer que MediaPlayer sea una variable de clase y manejar su ciclo de vida junto con el ciclo de vida del
Fragment
oActivity
que lo usa. Sin embargo, este es un tema para otra pregunta. Para mantener pequeño el alcance de esta respuesta, la escribí solo para ilustrar cómo reproducir un sonido al hacer clic en un botón en Android .Publicación original
Primero. Debe poner sus declaraciones dentro de un bloque, y en este caso el método onCreate.
Segundo. Inicializó el botón como variable uno , luego usó una variable cero y estableció su onClickListener en un onClickListener incompleto. Utilice la variable uno para setOnClickListener.
En tercer lugar, ponga la lógica para reproducir el sonido dentro de onClick.
En resumen:
fuente
RELEASE
Probado y funcionando al 100%
Esto era todo lo que teníamos que hacer
fuente
La mejor manera de hacer esto es aquí que encontré después de buscar un problema tras otro en LogCat
No liberar el reproductor multimedia le da este error en LogCat:
No restablecer el reproductor multimedia le da este error en LogCat:
Así que juega con el código seguro y simple para usar el reproductor multimedia.
Para reproducir más de un sonido en la misma actividad / fragmento, simplemente cambie el resID mientras crea un nuevo reproductor multimedia como
y jugarlo!
¡Que te diviertas!
fuente
fuente
raw
carpeta, si no existe, cree uno.-
caracteres especiales.En su actividad, debe tener un objeto
MediaPlayer
, dentro delonCreate
método o elonclick
método, debe inicializar elMediaPlayer
, comoMediaPlayer.create(this, R.raw.name_of_your_audio_file)
, luego su archivo de audio está listo para ser reproducido con la llamadastart()
, en su caso, ya que desea que sea colocado en un botón, tendrás que ponerlo dentro delonClick
método.Ejemplo:
fuente
hay algunos sonidos predefinidos: SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING.
¡Agradable!
usar como:
fuente
Prueba esto, creo que funcionará
fuente
crear un botón con un método podría ser llamado cuando el botón presionado (onCreate),
luego crea una variable para la clase (MediaPlayer) con la ruta de tu archivo
finalmente ejecuta el método de inicio en esa clase
el archivo se ejecutará cuando se presione el botón, ¡espero que esto haya sido útil!
fuente
En lugar de restablecerlo como lo proponen DeathRs:
podemos simplemente restablecer el MediaPlayer para que comience a usar:
fuente
Todas estas soluciones "suenan" agradables y razonables, pero hay una gran desventaja. ¿Qué sucede si su cliente descarga su aplicación y presiona repetidamente su botón?
A
MediaPlayer
veces, no podrá reproducir su sonido si hace clic en el botón muchas veces.Me encontré con este problema de rendimiento con la
MediaPlayer
clase hace unos días.¿La
MediaPlayer
clase se guarda para usar? No siempre. Si tiene sonidos cortos, es mejor usar laSoundPool
clase.Una solución segura y eficiente es la clase SoundPool que ofrece excelentes funciones y aumenta el rendimiento de su aplicación.
SoundPool no es tan fácil de usar como su
MediaPlayer
clase, pero tiene grandes beneficios cuando se trata de rendimiento y confiabilidad.Siga este enlace y aprenda a usar la clase SoundPool en su aplicación:
https://developer.android.com/reference/android/media/SoundPool
Youtube: Guardar solución
fuente