SetVolume d'un mediaplayer (service) depuis classe

Fermé
mauricelalpaga - Modifié le 4 août 2018 à 09:39
 mauricelalpaga - 4 août 2018 à 01:26
Bonjour,

Je souhaiterais savoir comment faire pour contrôler le volume sonore d'une musique lancé avec un MediPlayer depuis un service. J'ai créé une classe de paramétrage, qui contient une seekbar. Et j'aimerais que lorsque j'actionne cette Seekbar, le volume de la musique change.
J'ai essayé plusieurs techniques, et la dernière me semble relativement proche, mais il y a toujours une erreur (NullPointerException).

J'ai créé une méthode dans la classe du service "music", intitulé setVolume().

public class music extends Service{

    MediaPlayer mp;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    public void onCreate()
    {
        mp = MediaPlayer.create(this, R.raw.music);
        mp.setLooping(true);
    }

    public void setVolume(int currVolume){
        try{
            float log1=(float)(Math.log(100-currVolume)/Math.log(100));
            mp.setVolume( log1,log1);
        }catch(Exception e){

        }

    }
    public void onDestroy()
    {
        mp.stop();
        mp.release();
        stopSelf();
    }
    public void onStart(Intent intent,int startid){
        mp.start();
    }

}


Et voici le code ou j'appel cette méthode :

musicseek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                music control = new music();
                control.setVolume(i);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });


Merci d'avance pour votre aide.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

mauricelalpaga
4 août 2018 à 01:19
Je précise que l'appel de la méthode fonctionne bien, j'ai mis un System.out.println(log1) pour voir ce qu'il me sortait lorsque j’appuie sur le seekbar, et il me retourne bien un float. Mais l'erreur apparait à la ligne suivante lorsqu'il va affecter cette valeur au mediaplayer avec setVolume(), il dit : NullPointerException
Cela est peut être dût au fait qu'il ne trouve pas mp (mediaplayer).
0
mauricelalpaga
4 août 2018 à 01:26
Je précise que je ne souhaite pas utiliser de AudioManager, car cela change le volume général d'android, mais je souhaiterais que l'utilisateur puisse très bien régler le volume de mon application comme il le souhaite tout en gardant ses réglages sonores
0