Utilizzo Handler per aggiornamento Seek Bar

Tommaso Dariozzi

Nuovo Utente
22 Apr 2015
6
0
0
Sto cercando di aggiornare la Seek Bar in tempo reale per vedere quanto manca alla fine di un brano. Girando per il web e leggendo varie guide e seguendo alcuni tutorial, viene riportato il seguente codice:

Codice:
Handler mio_handler =  new Handler();
Qua nasce il primo problema. Mi segna errore in quanto la classe Handler è astratta, ma in tutte le guide che ho letto, nessuno la istanziava. Mal di poco, l'ho istanziata senza fare alcun ovveride.

Arriviamo al dunque, mi sono creato un metodo per aggiornare la Seek bar in questo modo:
Codice:
    private Runnable updateBar = new Runnable() {
        public void run()
        {
            startTime = mp.getCurrentPosition();
            sk.setProgress((int)startTime);
            mio_handler.postDelayed(this, 100);
        }
    };

    public void play(View v)
    {
        mp.start();
        sk.setMax((int) mp.getDuration());
        mio_handler.postDelayed(updateBar,100);
    }

L'errore che mi segna è sul 'postDelayed', dicendomi che non è possibile risolvere questo metodo. Perchè? Come lo posso risolvere? spero di essere stato chiaro nella spiegazione
 

Ciao, sono riuscito a risolvere. Era un errore sull'import. Adesso però ho un altro problemino.

Ovvero, che quando apro l'activity su cui ho messo lo 'start' automatico all'apertura, la mia SeekBar non si aggiorna. Inizia ad aggiornarsi solo quando premo il pulsante 'pause' e di nuovo 'start'. Perchè?

Questo è il codice che utilizzo

Codice:
       sk = (SeekBar) findViewById(R.id.bar);
       /* try {
            mp.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        } */
        mp = MediaPlayer.create(this, R.raw.canzone);
        mp.start();
    }


     private Runnable updateBar = new Runnable() {
        public void run()
        {
            startTime = mp.getCurrentPosition();
            sk.setProgress((int)startTime);
            seekHandler.postDelayed(this, 100);
        }
    };

    public void play(View v)
    {
        mp.start();
        sk.setMax((int) mp.getDuration());
        seekHandler.postDelayed(updateBar,100);
    }

    public void pause(View v)
    {
        mp.pause();
    }

    public void stop(View v)
    {
        mp.stop();
    }
 

Discussioni simili