Android: ¿Cómo detener los medios (mp3) en el juego cuando vienen milisegundos específicos?
Tengo un archivo mp3 y quiero jugar una palabra específica en ella. Tengo una hora de inicio ( 6889 ms
) y una hora de finalización ( 7254 ms
).
Tengo estos códigos:
- ANR android en MediaPlayer restablecer
- Cómo desarrollar un simple reproductor de audio streaming android?
- Reproducción de audio de MediaStore en un reproductor de medios Android
- MediaPlayer piensa aac * archivo de audio es un archivo de vídeo?
- ¿Cómo implementar un reproductor de audio para Android usando MediaPlayer y MediaController?
package com.example.playword; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.widget.TextView; public class PlayWord extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView tv = new TextView(this); tv.setText("Playing..."); setContentView(tv); final MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.nicholas); try { mPlayer.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mPlayer.seekTo(6889); //this is the start time mPlayer.start(); //how can I end it at 7254 ms? } }
- Cómo obtener los detalles actuales de la canción de reproducción de MediaPlayer
- Android: mediaplayer se fue con eventos no controlados
- Reproductor multimedia android error 100
- Media Player inicio parada inicio
- RTP en Android MediaPlayer
- ¿Cómo saber la duración de la canción de audio antes de la transmisión?
- ¿Qué es AwesomePlayer en android?
- La aplicación de vista web de Android no permite que el reproductor de video pase a pantalla completa
La mejor aproximación es usar un manejador para programar la detención de la reproducción. Inicie el reproductor y luego utilice el Handler's postDelayed
para programar la ejecución de un Runnable
que detendrá al reproductor. También debe iniciar el reproductor sólo después de completar la búsqueda inicial. Algo como esto:
public class PlayWord extends Activity implements MediaPlayer.OnSeekCompleteListener { Handler mHandler; MediaPlayer mPlayer; int mStartTime = 6889; int mEndTime = 7254; final Runnable mStopAction = new Runnable() { @Override public void run() { mPlayer.stop(); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final TextView tv = new TextView(this); tv.setText("Playing..."); setContentView(tv); mHandler = new Handler(); mPlayer = MediaPlayer.create(this, R.raw.nicholas); mPlayer.setOnSeekCompleteListener(this); mPlayer.seekTo(mStartTime); } @Override public void onDestroy() { mPlayer.release(); } @Override public void onSeekComplete (MediaPlayer mp) { mPlayer.start(); mHandler.postDelayed(mStopAction, mEndTime - mStartTime); } }
Tenga en cuenta también que el método MediaPlayer.create
que está utilizando devuelve un MediaPlayer que ya ha sido preparado y prepare
no debe volver a llamarse como lo está haciendo en su código.en la pantalla. También he añadido una llamada a release()
cuando se cierra la actividad.
Además, si desea actualizar la interfaz de usuario cuando se completa la búsqueda, tenga en cuenta que este método normalmente se llama desde un subproceso no UI. Tendrá que usar el controlador para publicar cualquier acción relacionada con la interfaz de usuario.
In Oncreate Method ,use the below 4 lines code: MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.nicholas); mPlayer.start(); mPlayer.seekTo(startTime); updatePlayerPostion(); private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); updatePlayerPostion(); } }; updatePlayerPostion() { handler.removeCallbacks(r); if(player.getCurrentPosition==7254) player.stop(); else handler.postDelayed(r, 1); //1 millisecond } Runnable r=new Runnable(){ @Override public void run() { // TODO Auto-generated method stub updatePlayerPostion() } };