Android Audio SeekBar

Я пытаюсь создать что-то, где воспроизводится один аудиофайл, и его можно приостановить и манипулировать с помощью индикатора выполнения / поиска. Я хочу, чтобы изображение занимало большую часть экрана, а затем кнопка паузы воспроизведения внизу слева и полоса справа от кнопки. Все работает панель поиска, которая нет ссылку на аудио. Вероятно, мой прогресс-кодирование - беспорядок, потому что если взять его из нескольких яЯ видел в Интернете, но они в основном сбивают меня с толку, поскольку они предназначены для приложений музыкального плеера, а не для воспроизведения одного аудиофайла.

Может ли кто-нибудь помочь мне с индикатором выполнения? Любые другие советы по улучшению моего программирования тоже подойдут.

(Я новичок в Android и программировании, чтобы предупредить вас)

Это моя Java:

MediaPlayer mediaPlayer;
    Button buttonPlayPause;
    ImageView Image;
    SeekBar seekBar;

    private int stateMediaPlayer;
    private final int stateMP_NotStarter = 0;
    private final int stateMP_Playing = 1;
    private final int stateMP_Pausing = 2;
    int total;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerwere);

        Image = (ImageView) findViewById(R.id.pdfview);
        Image.setImageResource(R.drawable.wereim);

        seekBar = (SeekBar) findViewById(R.id.seekBar);

        buttonPlayPause = (Button) findViewById(R.id.playpause);

        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

        seekBar.setOnSeekBarChangeListener(seekBarOnSeekListener);

        initMediaPlayer();

        Thread currentThread = new Thread(this);
        currentThread.start();

    }

    private void initMediaPlayer() {
        mediaPlayer = new MediaPlayer();
        mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;

        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer arg0) {
                // TODO Auto-generated method stub
                total = mediaPlayer.getDuration();
            }

        });

        seekBar.setProgress(0);
        seekBar.setMax(total);
    }

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (stateMediaPlayer) {
            case stateMP_NotStarter:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            case stateMP_Playing:
                mediaPlayer.pause();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                break;
            case stateMP_Pausing:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            }

        }
    };

    SeekBar.OnSeekBarChangeListener seekBarOnSeekListener = new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub

            if (fromUser) {
                mediaPlayer.seekTo(progress);
                seekBar.setProgress(progress);
            }

        }
    };

    @Override
    public void run() {
        // TODO Auto-generated method stub

        try {
            while (mediaPlayer != null) {
                int currentPosition = mediaPlayer.getCurrentPosition();
                Message msg = new Message();
                msg.what = currentPosition;
                threadHandler.sendMessage(msg);
            }
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private Handler threadHandler = new Handler() {
        public void handleMessage(Message msg) {
            seekBar.setProgress(msg.what);
        }
    };

И это то, что было моей Java, прежде чем я попытался использовать seekBar:

    MediaPlayer mediaPlayer;
    Button buttonPlayPause;
    ImageView Image;

    private int stateMediaPlayer;
    private final int stateMP_NotStarter = 0;
    private final int stateMP_Playing = 1;
    private final int stateMP_Pausing = 2;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerwere);

        Image = (ImageView) findViewById(R.id.pdfview);
        Image.setImageResource(R.drawable.wereim);

        buttonPlayPause = (Button) findViewById(R.id.playpause);

        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

        initMediaPlayer();

    }

    private void initMediaPlayer() {
        mediaPlayer = new MediaPlayer();
        mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;
    }

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (stateMediaPlayer) {
            case stateMP_NotStarter:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            case stateMP_Playing:
                mediaPlayer.pause();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                break;
            case stateMP_Pausing:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            }

        }
    };

Это моя ява после Vishal Vaja 'ответ:

MediaPlayer mediaPlayer;
    Button buttonPlayPause;
    ImageView Image;
    SeekBar seekBar;
    Handler handler;

    private int stateMediaPlayer;
    private final int stateMP_NotStarter = 0;
    private final int stateMP_Playing = 1;
    private final int stateMP_Pausing = 2;
    private int mediaPos;
    private int mediaMax;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerwere);

        Image = (ImageView) findViewById(R.id.pdfview);

        Image.setImageResource(R.drawable.wereim);

        seekBar = (SeekBar) findViewById(R.id.seekBar);

        buttonPlayPause = (Button) findViewById(R.id.playpause);

        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

        seekBar.setOnSeekBarChangeListener(seekBarOnSeekChangeListener);

        initMediaPlayer();

    }

    private void initMediaPlayer() {
        handler = new Handler();
        mediaPlayer = new MediaPlayer();
        mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;
        mediaPos = mediaPlayer.getCurrentPosition();

        mediaMax = mediaPlayer.getDuration();

        seekBar.setMax(mediaMax); // Set the Maximum range of the
                                    // seekBar.setProgress(mediaPos);// set
                                    // current progress to song's

        handler.removeCallbacks(moveSeekBarThread);
        handler.postDelayed(moveSeekBarThread, 100);
    }

    private Runnable moveSeekBarThread = new Runnable() {

        public void run() {
            if (mediaPlayer.isPlaying()) {

                int mediaPos_new = mediaPlayer.getCurrentPosition();
                int mediaMax_new = mediaPlayer.getDuration();
                seekBar.setMax(mediaMax_new);
                seekBar.setProgress(mediaPos_new);

                handler.postDelayed(this, 100); // Looping the thread after 0.1
                                                // second
                                                // seconds
            }
        }
    };

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (stateMediaPlayer) {
            case stateMP_NotStarter:
                mediaPlayer.start();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            case stateMP_Playing:
                mediaPlayer.pause();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                break;
            case stateMP_Pausing:
                mediaPlayer.start();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            }

        }
    };

    SeekBar.OnSeekBarChangeListener seekBarOnSeekChangeListener = new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub

            if (fromUser) {
                mediaPlayer.seekTo(progress);
                seekBar.setProgress(progress);
            }

        }
    };

Ответы на вопрос(2)

Ваш ответ на вопрос