3

タイムシーカーを最新の状態に保つための実行可能なバックグラウンドスレッドを持つmediplayerをAndroidで作成しました

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {
        long totalDuration = mediaPlayer.getDuration();
        long currentDuration = mediaPlayer.getCurrentPosition();

        // .... setting textviews of durations
           // ... converting milli to mm:ss and setProgress(progress)

        mHandler.postDelayed(this, 100);
    }
};

また、メインアクティビティにオプションメニューがあり、クリックするとアクティビティを終了する必要があります

public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.exitplayer)
            exitPlayer();
        return super.onOptionsItemSelected(item);
    }
    private void exitPlayer() {
        mediaPlayer.stop();
        mediaPlayer.release();
        try {
            mUpdateTimeTask.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    this.finish();

    }

しかし、それは投げます

android.media.MediaPlayer.getDuration(ネイティブ メソッド) での java.lang.IllegalStateException

スレッドに問題があり、アクティビティを終了する前にそのスレッドを停止する必要があることは知っていますが、誰かが plz をどのように支援できるか正確にはわかりません。

4

1 に答える 1