2011-03-28 12 views
12

Bir mp3 dosyasına sahibim ve içinde özel bir kelime oynamak istiyorum. Başlangıç ​​saatim var (6889 ms) ve bitiş zamanı (7254 ms).Android: Belirli milisaniye geldiğinde medya (mp3) oynatma nasıl durdurulur?

Ben bu kodları vardır:

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

cevap

8

iyi yaklaşım zaman çalma durdurulmasını Eylemciler kullanmaktır. Oynatıcıyı başlatın ve oyuncuyu durduracak olan Runnable'un çalışmasını planlamak için Handler postDelayed'u kullanın. Oynatıcıyı ancak ilk arama tamamlandıktan sonra başlatmalısınız. Böyle bir şey de:

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); 
    } 
} 

dikkat edin, eğer döner zaten hazırlanmış ve sizin code.on ekranı yapıyoruz gibi preparetekrar çağrılamaz gereken bir MediaPlayer kullanıyorsunuz MediaPlayer.create yöntemi. Etkinlik bittiğinde de release() numaralı telefona bir çağrı ekledim. Ayrıca, aramayı tamamladığında kullanıcı arayüzünü güncellemek isterseniz, bu yöntemin genellikle UI olmayan bir iş parçacığı tarafından çağrıldığını unutmayın. Üste | UI ile ilgili eylemleri göndermek için işleyiciyi kullanmanız gerekecektir.

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() 
       } 
     }; 
İlgili konular