簡體   English   中英

Android VideoView檢測視頻即將結束

[英]Android VideoView detect video is soon finish

我想知道這部電影離結尾是否只有一分鍾的路程。 因此,我使用以下代碼進行檢測。 但是,播放器掛起,無法執行任何操作。 有人可以糾正我的代碼嗎? 謝謝!

public Runnable mPlayToEnd = new Runnable() {
    public void run() {
        while(true)
        {
            if(mVideoDisplayView.getDuration() - mVideoDisplayView.getCurrentPosition() <= 1000 * 60)
            {
                   Intent intent = new Intent(WILL_END);  
                   sendBroadcast(intent);
                   mSendEndEvent = false;
                   Log.d("123","--Duration = " + mVideoDisplayView.getDuration() + "--");
                   Log.d("123","--Current = " + mVideoDisplayView.getCurrentPosition() + "--");
                   Log.d("123","--Soon End--");
            }
        }
    }
};
     Handler mCheckEndHandler = new Handler();
     mCheckEndHandler.post(mPlayToEnd);

之所以掛起,是因為您有一個無限的while(true)循環,您永遠不會中斷它,並且它會嘗試以最大速度運行,以檢查您是否距離結束還有1分鍾。 您可以做的是定期檢查,例如。 每1秒,然后進行相應處理,因此您的代碼可能如下所示:

public Runnable mPlayToEnd = new Runnable() {
    @Override
    public void run() {
        if (mmVideoDisplayView.getDuration() - mVideoDisplayView.getCurrentPosition() <= 1000 * 60) {
            Intent intent = new Intent(WILL_END);  
            sendBroadcast(intent);
            mSendEndEvent = false;
            Log.d("123","--Duration = " + mVideoDisplayView.getDuration() + "--");
            Log.d("123","--Current = " + mVideoDisplayView.getCurrentPosition() + "--");
            Log.d("123","--Soon End--");
        }
        else {
            mCheckEndHandler.postDelayed(mPlayToEnd, 1000);
        }
    }
}

然后將處理程序聲明為類成員變量,以便在您的runnable中可以訪問它,然后啟動它:

mCheckEndHandler = new Handler();
mCheckEndHandler.post(mPlayToEnd);

將會發生的是您的可運行設備將檢查條件,如果滿足,它將發送廣播,否則,它將在1秒(1000毫秒)內再次運行。 重復整個過程,直到滿足您的條件為止。

暫無
暫無

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

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