2011-02-12 8 views
10

He escrito la aplicación más básica que se me ocurre para intentar reproducir un archivo mp3, pero no está funcionando. No recibo ningún error, pero cuando se inicia la aplicación, el sonido no se reproduce.android MediaPlayer no está reproduciendo el archivo mp3

public class soundtest extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MediaPlayer mp = new MediaPlayer(); 
     mp.create(getApplicationContext(), R.raw.norm_iphone_money); 
     mp.start(); 
    } 
} 

¿Qué me falta? Tengo "norm_iphone_money.mp3" dentro de la carpeta res/raw. El archivo se reproduce bien en Windows Media Player e iTunes.

Estoy usando las últimas versiones de Java SDK y Eclipse para Java. La aplicación está dirigida para Android 2.2 y funciona bien en el emulador a pesar de no tener sonido.

+0

¿Has probado un dispositivo real? Puede intentar usar los métodos setDataSource() y prepare() antes de iniciar un MediaPlayer() en lugar de create(), pero dudo que funcione si create() no ... – DJC

Respuesta

9

intente reemplazar estas dos líneas:

MediaPlayer mp = new MediaPlayer(); 
mp.create(getApplicationContext(), R.raw.norm_iphone_money); 

con esta línea:

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

Y ver si funciona.

+7

si estos dos son escritos cualquiera que sea lógicamente diferente en el código compilado, me sorprendería. – DJC

+1

No, pero probarlo solo funciona de esa manera, no funciona como lo escribió originalmente. Si alguien más se preocupa por explicar exactamente * por qué * eso es, sería genial. La reproducción de un recurso de audio RAW se describe aquí http://developer.android.com/guide/topics/media/index.html – ShadowGod

+5

Por supuesto, es lógicamente diferente. mp.create llamará al método estático y devolverá una nueva instancia de un MediaPlayer, que nunca se almacenará.Luego, llama a start() en la instancia construida por defecto. – Yuyo

-2

El método estático create (Context, int) del tipo MediaPlayer se debe acceder de forma estática. Prueba esto:

MediaPlayer.create(getApplicationContext(), R.raw.norm_iphone_money).start(); 

se puede reproducir el .mp3 con esta línea también

mp.create(getApplicationContext(), R.raw.norm_iphone_money).start(); 
35

El problema es que el volumen de los medios de comunicación se establece en 0 (no el volumen del timbre). Se puede establecer por:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0); 
+0

¿qué es esta StartUpActivity – Deepzz

+0

editó la respuesta! StartupActivity es solo una actividad en mi proyecto. Pero podemos referir la constante AUDIO_SERVICE por clase Context. La actividad es solo un Contexto, y AUDIO_SERVICE es una cadena constante estática de Contexto. Muchas gracias por tus comentarios, Deppzz! –

+0

muchas gracias .. :) – Deepzz

-3

Yo sugeriría esto:

MediaPlayer mp = new MediaPlayer(); 
//bla bla bla 
mp = MediaPlayer.create(getApplicationContext(), R.raw.norm_iphone_money); 
+0

¿Por qué creas un reproductor de medios 'mp', luego lo reemplazas con el resultado de' MediaPlayer.create'? –

-4

tenía el mismo problema después de que hace clic para iniciar el reproductor de medios, la pantalla se quedó en negro y la aplicación se detuvo.

i acaba de cambiar

MediaPlayer pf = MediaPLayer.create (esto, R.raw.sound); mp.start();

a

MediaPlayer pf = MediaPLayer.create (esto, R.raw.sound) .start();

No estoy muy seguro de cuál es la diferencia, pero resolvió mi problema.

+0

No hay diferencia si solo encadena la llamada a método. –

Cuestiones relacionadas