¿Cómo puedo mostrar un MediaController
mientras reproduzco un archivo de audio? Estoy creando una instancia de MediaController
y llamando a su método show()
, pero no se muestra. ¿Puede alguien ayudarme a resolver este problema?¿Cómo puedo mostrar un MediaController mientras reproduzco audio en Android?
Respuesta
Aquí hay un ejemplo de una actividad que usa MediaPlayer y MediaController para reproducir audio.
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.media.MediaPlayer.OnPreparedListener;
import android.view.MotionEvent;
import android.widget.MediaController;
import android.widget.TextView;
import java.io.IOException;
public class AudioPlayer extends Activity implements OnPreparedListener, MediaController.MediaPlayerControl{
private static final String TAG = "AudioPlayer";
public static final String AUDIO_FILE_NAME = "audioFileName";
private MediaPlayer mediaPlayer;
private MediaController mediaController;
private String audioFile;
private Handler handler = new Handler();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audio_player);
audioFile = this.getIntent().getStringExtra(AUDIO_FILE_NAME);
((TextView)findViewById(R.id.now_playing_text)).setText(audioFile);
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
mediaController = new MediaController(this);
try {
mediaPlayer.setDataSource(audioFile);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
Log.e(TAG, "Could not open file " + audioFile + " for playback.", e);
}
}
@Override
protected void onStop() {
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//the MediaController will hide after 3 seconds - tap the screen to make it appear again
mediaController.show();
return false;
}
//--MediaPlayerControl methods----------------------------------------------------
public void start() {
mediaPlayer.start();
}
public void pause() {
mediaPlayer.pause();
}
public int getDuration() {
return mediaPlayer.getDuration();
}
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int i) {
mediaPlayer.seekTo(i);
}
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
public int getBufferPercentage() {
return 0;
}
public boolean canPause() {
return true;
}
public boolean canSeekBackward() {
return true;
}
public boolean canSeekForward() {
return true;
}
//--------------------------------------------------------------------------------
public void onPrepared(MediaPlayer mediaPlayer) {
Log.d(TAG, "onPrepared");
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(findViewById(R.id.main_audio_view));
handler.post(new Runnable() {
public void run() {
mediaController.setEnabled(true);
mediaController.show();
}
});
}
}
Aquí está un diseño que se puede utilizar con el código anterior:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_audio_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Now playing:"
android:textSize="25sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/now_playing_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_gravity="center"
android:text="Now playing.."
android:textSize="16sp"
android:textStyle="italic"
/>
</LinearLayout>
¿Alguien ha intentado el código anterior ?, no funciona, no escucho el sonido ni el programa de audio, sí, definí 'AUDIO_FILE_NAME 'algo así como" mysite.com/talk/1.mp3 " –
Gracias, esto me ayudó mucho !!! – krisDrOid
Yo (por fin) arreglé el método onStop como lo sugirió @ jp36. Gracias por la corrección @ jp36! – user229487
Todavía no tengo representante suficiente en comentar así que tengo que acaba de publicar esto como una respuesta.
@ respuesta de user229487
es necesario agregar mediaController.hide();
al método onStop()
. Si no se hace esto y le sucede a girar la ventana o cierra la ventana mientras se está mostrando obtendrá un error de Activity x has leaked window
Nuevo método debería tener este aspecto
@Override
protected void onStop() {
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
}
He copiado el código anterior de user229487 textualmente pero no pudo hacerlo funcionar. Teniendo en cuenta que soy nuevo en el desarrollo de Android, me di cuenta de la manera más difícil en que necesita poner un intento, así como algunas otras cosas. Tampoco entiendo exactamente cómo funcionará la intención con una interfaz de usuario (nuevamente soy nuevo), pero trabajaré en ello.
Pocas cosas para otros noobs como yo para obtener el código anterior para trabajar (yo por lo menos tengo a no chocar ahora y reproducir una canción :)):
no se compilará sin que esto:
@Override
public int getAudioSessionId() {
return 0;
}para configurar manualmente de audio: (línea de cambio a :)
public static final String AUDIO_FILE_NAME = Environment.getExternalStorageDirectory()+"/MusicFolder/Song.mp3";
Configuración intención
añadir esta línea:this.getIntent().putExtra(AUDIO_FILE_NAME,AUDIO_FILE_NAME);
Antes de esta línea:audioFile = this.getIntent().getStringExtra(AUDIO_FILE_NAME);
debe recopilar y reproducir la canción ahora.
Todavía no tengo permitido comentar ... por lo tanto escribo aquí. El código anterior es excelente. Solo necesitaba sacar el
mediaPlayer.prepare();
mordió la captura de prueba; de lo contrario, la actividad se interrumpiría. No estoy seguro de qué debe hacer este bit, está funcionando muy bien sin él. ¡¡Gracias!!
- 1. ¿Cómo reproduzco un archivo de audio en Android?
- 2. Error de Android Media Player (1, -4) mientras reproduzco un audio de la carpeta Assets
- 3. En android, ¿cómo puedo guardar una secuencia RTSP en el archivo mientras la reproduzco?
- 4. Android Show MediaController
- 5. MediaController siempre se muestra en Android
- 6. Extienda MediaController para android
- 7. ¿Cómo implementar un reproductor de audio para Android usando MediaPlayer y MediaController?
- 8. ¿Cómo puedo mostrar un combobox en Android?
- 9. MediaController Posicionamiento
- 10. MediaController con MediaPlayer
- 11. ¿Cómo puedo obtener un Android MediaController para que aparezca desde el diseño xml?
- 12. ¿Cómo volver a colocar MediaController?
- 13. Agregar un botón a MediaController
- 14. ¿Cómo puedo mostrar mi actividad como un diálogo en Android?
- 15. ¿Cómo actualizar un TextView mientras se repite en Android?
- 16. Android: ¿Qué uso tiene AnchorView de MediaController?
- 17. Android: múltiples pistas de audio en VideoView?
- 18. ¿Cómo mostrar autocompletar mientras escribo en JTextArea?
- 19. ¿Cómo se usa AsyncTask para mostrar un ProgressDialog mientras se trabaja en segundo plano en Android?
- 20. Haciendo un bucle de audio en android
- 21. ¿cómo reproduzco el archivo mp3?
- 22. ¿Cómo reproduzco programáticamente un MP3 en un iPhone?
- 23. ¿Puede grabar video/audio en el iPhone mientras reproduce un video por separado (con audio opcionalmente)?
- 24. ¿Cómo reproduzco un sonido de sistema en XAML?
- 25. Android. ¿Cómo hacer grabaciones de audio con alto volumen?
- 26. porting pulse audio en Android
- 27. Mantener MediaController en la pantalla en VideoView
- 28. Android - Audio múltiple y simultáneo Streaming
- 29. ¿Cómo reproduzco un mp3 en la carpeta res/raw de mi aplicación de Android?
- 30. Html Audio en Android Webview
hay un icono al lado de la calificación de cada respuesta (en el lado izquierdo, lo verá), simplemente haga clic en él – Lope
Por favor, acepte una de las siguientes respuestas. Ayuda a mostrar aprecio por las personas que se tomaron el tiempo para responder a su pregunta. – Pieter