2011-03-28 8 views
12

मेरे पास एक एमपी 3 फ़ाइल है और मैं इसमें एक विशिष्ट शब्द खेलना चाहता हूं। मेरे पास एक प्रारंभ समय है (6889 ms) और अंत समय (7254 ms)।एंड्रॉइड: जब विशिष्ट मिलीसेकंड आते हैं तो मीडिया (एमपी 3) खेलने में कैसे रोकें?

मैं इन कोड है:

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

उत्तर

8

सबसे अच्छा तरीका प्लेबैक के रोक-समय पर एक हैंडलर उपयोग करने के लिए है। खिलाड़ी को शुरू करें और फिर Runnable के निष्पादन को शेड्यूल करने के लिए हैंडलर के postDelayed का उपयोग करें जो खिलाड़ी को रोक देगा। शुरुआती तलाश पूरी होने के बाद ही आपको खिलाड़ी को भी शुरू करना चाहिए। कुछ इस तरह:

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

भी ध्यान रखें कि MediaPlayer.create विधि आप रिटर्न एक MediaPlayer कि पहले से ही तैयार किया गया है और prepareफिर जैसे आप अपने code.on में स्क्रीन कर रहे हैं नहीं बुलाया जाना चाहिए उपयोग कर रहे हैं। जब गतिविधि निकलती है तो मैंने release() पर एक कॉल भी जोड़ा।

इसके अलावा, यदि आप पूरा होने पर यूआई को अपडेट करना चाहते हैं, तो ध्यान रखें कि इस विधि को आमतौर पर गैर-यूआई थ्रेड से बुलाया जाता है। यूआई से संबंधित कार्यों को पोस्ट करने के लिए आपको हैंडलर का उपयोग करना होगा।

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