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:

 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? } } 

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() } }; 
  • MediaPlayer en subproceso separado utilizando Service o IntentService
  • MediaPlayer.seekTo () no funciona para la posición sin búfer
  • Android Streaming Video - Necesita la relación de aspecto
  • Problemas con MediaPlayer, recursos crudos, detener e iniciar
  • La reproducción de una canción tras otra provoca un error en MP3Extractor
  • Android Problemas al reproducir archivos de audio
  • MediaPlayer setDataSource necesita asesoramiento sobre las mejores prácticas
  • Ayuda de Android: ¿Cómo abrir una URL de archivo de vídeo remota para reproducir en MediaPlayer sin tener que abrir una ventana del navegador?
  • Android: ¿Cómo crear un reproductor de vídeo?
  • ¿Cómo permitir a los usuarios ver y reproducir canciones en Android a las que ya tienen acceso (por ejemplo, a través de Google Play)?
  • Java.lang.IllegalStateException ¿qué significa?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.