簡體   English   中英

如何使用Android MediaPlayer在毫秒范圍內播放mp3文件?

[英]How to play an mp3 file between a range of milliseconds using android MediaPlayer?

我可以使用android的MediaPlayer對象播放mp3文件。 但是我想在毫秒范圍內播放,例如在30000 ms到40000 ms之間(僅10秒)。 我該如何實現?

目前,我擁有以下代碼,

private MediaPlayer mPlayer;
public void play() {
    try {
        mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.mp3_file);
        if (mPlayer != null) {
            int currentPosition = mPlayer.getCurrentPosition();
            if (currentPosition + 30000 <= mPlayer.getDuration()) {
                mPlayer.seekTo(currentPosition + 30000);
            } else {
                mPlayer.seekTo(mPlayer.getDuration());
            }
            mPlayer.start();
        }
    }
    catch(Exception e) {
    }
}

任何幫助是極大的贊賞。 謝謝!

您可以使用以下方法:

public int getCurrentPosition ()

要獲取以milSeconds為單位的當前時間,可能是在每1000 milSeconds運行一次的Handler中進行測試,以查看:

if(mPlayer.getCurrentPosition() >= (mPlayer.getDuration + 40000));

使用完媒體文件后,請不要忘記釋放它:

public void release();
mPlayer.release();

釋放與此MediaPlayer對象關聯的資源。 使用MediaPlayer完成后,調用此方法被認為是一種好習慣。 特別是,每當應用程序的Activity暫停(調用其onPause()方法)或停止(調用其onStop()方法)時,都應調用此方法以釋放MediaPlayer對象,除非應用程序具有特殊的需要保持物體周圍。 除了保留不必要的資源(例如內存和編解碼器實例)外,如果不再需要MediaPlayer對象,則無法立即調用此方法也可能導致移動設備持續消耗電池,如果沒有,則導致其他應用程序播放失敗設備上支持同一編解碼器的多個實例。 即使支持同一編解碼器的多個實例,當同時使用不必要的多個實例時,也可能會導致性能下降。

最好的方法是使用Handler來定時停止播放。 啟動播放器,然后使用Handler的postDelayed調度將停止播放器的Runnable的執行。 您還應該僅在初始搜尋完成后才啟動播放器。 像這樣:

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()的調用。

另外,如果要在搜索完成后更新UI,請注意,通常是從非UI線程調用此方法的。 您將必須使用處理程序來發布任何與UI相關的操作。


我從以下站點復制了此文件: Android:如何在特定的毫秒數到來時停止播放媒體(mp3)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM