2011-03-28 13 views
12

Tengo un archivo mp3 y quiero reproducir una palabra específica en él. Tengo una hora de inicio (6889 ms) y hora de finalización (7254 ms).Android: ¿Cómo detener los medios (mp3) en la reproducción cuando vienen milisegundos específicos?

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

Respuesta

8

El mejor enfoque es utilizar un manejador en cuando a la interrupción de la reproducción. Inicie el reproductor y luego use el controlador postDelayed para programar la ejecución de un Runnable que detendrá al jugador. También debe iniciar el reproductor solo después de que se complete 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); 
    } 
} 

también señalan que el método MediaPlayer.create está utilizando devuelve un MediaPlayer que ya se ha preparado y prepare debe no ser llamado de nuevo como se está haciendo en su code.on la pantalla. También agregué una llamada al release() cuando finaliza la actividad.

Además, si desea actualizar la interfaz de usuario cuando finalice la búsqueda, tenga en cuenta que este método generalmente se llama desde un subproceso no relacionado con la interfaz de usuario. Deberá usar el controlador para publicar cualquier acción relacionada con la interfaz de usuario.

0
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() 
       } 
     }; 
Cuestiones relacionadas