2012-08-11 11 views
21

En mi aplicación Android tengo algunos botones que deberían funcionar con el método onTouch(), por supuesto necesito cambiar el texto del botón, cuando el dedo esté en la posición ACTION_DOWN. Pero estos botones deben reproducir predeterminado sonido de botón de clic de Android (como en el método onClick()). Donde puedo encontrar ese sonido? Creo que debe estar en SDK, pero ¿cómo puedo encontrarlo? ¿Y qué métodos son mejores para tal operación? Estoy usando MediaPlayer.Reproducción del sonido android predeterminado del botón, haciendo clic en el método Toque()

listado:

public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getAction(); 
    switch (action) { 
    case MotionEvent.ACTION_DOWN: 
     addTextShadow(v); 
     Log.v(LOG_TAG, "ACTION_DOWN"); 
     break; 
    case MotionEvent.ACTION_MOVE: 
     clearTextShadow(v); 
     isMoved = true; 
     Log.v(LOG_TAG, "ACTION_MOVE"); 
     break; 
    case MotionEvent.ACTION_UP: 
     Log.v(LOG_TAG, "ACTION_UP"); 
     if (!isMoved) { 
      clearTextShadow(v); 
      if (v.getId() == R.id.btn_new) { 
       Log.v(LOG_TAG, "New pressed"); 

          playSound(); //MY METHOD TO PLAY SOUND 

      } else if (v.getId() == R.id.btn_saved) { 
       Log.v(LOG_TAG, "Saved pressed"); 
      } else if (v.getId() == R.id.btn_random) { 
       Log.v(LOG_TAG, "Random pressed"); 
      } 
     } 
     isMoved = false; 
     break; 
    } 
    return true; 
} 

Y mi método reproducirSonido():

public void playSound(){ 
    if (mp != null) { 
     mp.release(); 
     mp = null; 
    } 
    try { 
     mp = MediaPlayer 
    .create(MyActivity.this, R.raw.sound); //BUT HERE I NEED DEFAULT SOUND! 
     mp.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

¿Android no reproduce el sonido predeterminado de clic por 'predeterminado'? Al menos lo hace en ICS. –

+0

Vishwa Patel, no, Android reproduce el sonido de clic predeterminado, cuando usamos onClickListener, pero no en TouchListener. Pruebo todos los programas con ICS (SGS2). – dmgmyza

Respuesta

62

Utilice este código en su método onTouch():

view.playSoundEffect(android.view.SoundEffectConstants.CLICK); 

Si simplemente está buscando un sonido Android preestablecido, entonces es mejor utilizar esta funcionalidad que se proporciona a usted de forma gratuita por el marco. Hacer cualquier otra cosa, a menos que sea necesario para la personalización, simplemente daría como resultado que trabaje contra el marco en lugar de trabajar con él.

+2

Vishwa Patel, super! Funciona, muchas gracias. U r derecho, playSound() y MediaPlayer son inútiles ahora. – dmgmyza

+0

@dmgmyza ¡Excelente! Me alegro de haber ayudado. ¡Debes votar mi respuesta si crees que es útil! –

+0

Realmente quiero, pero mi reputación es de solo 12 ahora. Necesito 3 puntos más para votar. – dmgmyza

0

Uso sonidos predeterminados de /system/media/audio/

MediaPlayer o soundpool contribuye a la aplicación de reproducción.

0

Considere el uso de view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);.

Hará las dos cosas: reproducir el sonido predeterminado y vibrar si el usuario lo tiene habilitado en la configuración global.

Cuestiones relacionadas