2012-07-07 12 views
5

Soy nuevo en Android y estoy tratando de hacer algo simple como reproducir un MP3 personalizado cuando se hace clic en un botón. Esto parece ser un fairlycommonquestion, pero aunque mi código sigue los ejemplos y no recibo ningún error, no escucho ningún sonido ni en el simulador ni en un teléfono real.Reproducir un sonido cuando se hace clic en Android

Mi MainActivity.java:

public class MainActivity extends Activity { 

    private static final String TAG = "MyActivity"; 

    public void MyActivity(Bundle onSavedStateInstance) { 
     Log.v(TAG, "Initializing sounds..."); 

     final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarma_67560); 

     Button play_button = (Button)this.findViewById(R.id.play_button); 
     play_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Log.v(TAG, "Playing sound..."); 
       mp.start(); 
      } 
     }); 
     Log.v(TAG, "Sounds initialized."); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

Y mi activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:padding="@dimen/padding_medium" 
     android:text="@string/hello_world" 
     tools:context=".MainActivity" /> 

    <Button 
     android:id="@+id/play_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/play_button" /> 

</RelativeLayout> 

estoy desarrollando utilizando el plug-in de Eclipse, que no muestra ningún error y parece correr el aplicación correctamente en el simulador o teléfono real, pero cuando hago clic en el botón de reproducción, no pasa nada. No estoy seguro de si el simulador admite sonido (pero supongo que sí) y he confirmado que el sonido se ha silenciado en mi teléfono.

¿Qué estoy haciendo mal?

Además, no veo mis declaraciones de registro en ninguna parte, ni en la consola de Eclipse ni en el panel LogCat. ¿Debo ver esos impresos en algún lugar?

+0

Probablemente desee llamar a algo simple como 'MusicManager.getInstance(). Play (this, R.raw.my_sound);'. Para que esto funcione, necesita una gestión correcta de los recursos. Puede usar una biblioteca liviana para esto: https://github.com/delight-im/Android-Audio – caw

Respuesta

10

Esto no funcionará por una razón muy simple: nunca se llama a MyActivity().

Android llamará a onCreate() de su actividad, pero cualquier otra llamada a método debe realizarla usted. Como nunca lo llama el método MyActivity(), el botón nunca recibe un onClickListener() y el sonido nunca se reproduce. Trate de usar el código siguiente en su lugar:

public class MainActivity extends Activity { 

    private static final String TAG = "MyActivity"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Log.v(TAG, "Initializing sounds..."); 

     final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarma_67560); 

     Button play_button = (Button)this.findViewById(R.id.play_button); 
     play_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Log.v(TAG, "Playing sound..."); 
       mp.start(); 
      } 
     }); 
     Log.v(TAG, "Sounds initialized."); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 
3

usted debe poner su código dentro onCreate y después de setContentView() ya que su método/constructor público MyActivity vacío (Bundle onSavedStateInstance) Nunca se llama, por lo tanto, su código nunca se ejecuta. Algo como esto:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.v(TAG, "Initializing sounds..."); 
    final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarma_67560); 
    Button play_button = (Button)this.findViewById(R.id.play_button); 
    play_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Log.v(TAG, "Playing sound..."); 
      mp.start(); 
     } 
    }); 
    Log.v(TAG, "Sounds initialized."); 
} 
Cuestiones relacionadas