Aller au contenu

Mise en veille du telephone --> probleme du mediaplayer


Zinou6987

Recommended Posts

Bonjour à tous,

J'ai développé une petite application sous android..Mais je me retrouve face à un sérieux problème.

Mon application se base sur un CountDownTimer, qui à la fin de ce timer doit lancer un son (un mp3 via un MediaPlayer) et vibrer. Et relancer un nouveau Timer.

Le problème c'est qu'après installation sur mon téléphone, lorsque le téléphone se met en veille, le MediaPlayer ne lance aucun son lors de l'appel à start() du MediaPlayer, pour la vibration c'est le même problème (je vois aussi que le timer se bloque, j'ai l'impression que le programme se bloque à l'appel de start).

Si j'enlève le code correspondant a la vibration et au lancement start() du MediaPlayer, tout est ok, mon Timer passe bien à l'étape suivante.

Ce qui est super bizarre c'est que l'appli marche bien sur l'émulateur, l'appli marche bien lorsque le téléphone est branché via usb ou même à la prise de courant. Le problème ne se pose que lorsque l'appareil est débranché et passe en veille... le MediaPlayer.start() se bloque et se relance dès que je rallume le téléphone(pareil pour la vibration).

Quelqu'un aurai-t-il une idée???? J'ai cherché partout, et je ne comprend pas...

Merci à vous.

Zinou

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Voici ma classe faisant office de timer :

     public class MyCount extends CountDownTimer {

       public MyCount(long millisInFuture, long countDownInterval) {
         super(millisInFuture, countDownInterval);
       }


       public void onFinish() {

           timeRemaining = 0;
           //timeDisplay : un TextView m'indiquant le temps restant
               timeDisplay.setText(getLongToTime(timeRemaining));

           Vibrator vib=(Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
           vib.vibrate(3000);
           //mp-->le media player que j'ai initialisé avant 
               mp.start();

           //passe d'un niveau-->relance un nouveau timer
           updateLevel();
       }

       @Override
       public void onTick(long millisUntilFinished) {
           timeRemaining = millisUntilFinished;
           timeDisplay.setText(getLongToTime(timeRemaining));        
       }
   }

Ce sont les deux qui bloquent en veille, le mp.start() et vib.vibrate(3000). Si j'enlève ces 2 instructions, je vois bien que mon chrono change de niveau et se relance en veille sans problème...

Merci de ta réponse en tout cas.

Bonne journée!

Zinou

Lien vers le commentaire
Partager sur d’autres sites

Merci à toi.... je m'arrache les cheveux....

Je viens d'essayer ça :

onFinish du countDownTimer :

public void onFinish() {       
           timeRemaining = 0;
           timeDisplay.setText(getLongToTime(timeRemaining));
           Intent mIntentAlarm = new Intent(getBaseContext(),ServiceGong.class);
               PendingIntent mAlarmSender = PendingIntent.getService(getBaseContext(), 0, mIntentAlarm, 0);
               AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
               alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), mAlarmSender);   
}

Et voici mon ServiceGong :

public class ServiceGong extends Service {

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

@Override
public void onDestroy() {
    super.onDestroy();
}    

@Override
public void onStart(Intent intent, int startId) {
    MediaPlayer mp = new MediaPlayer();
    mp.reset();
    try {
       mp.setDataSource("/sdcard/AppliData/Sounds/buzzer.mp3");
       mp.prepare();
       mp.start();
   } catch (IllegalArgumentException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
   } catch (IllegalStateException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
   } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
   }

    Vibrator vib=(Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
    vib.vibrate(2000);

   stopSelf();
}

}

Mais toujours sans succès........................ ce qui est carrément bizarre c'est qu'au bout d'un certain temps de veille, le service se lance... mais c'est des fois 30 secondes plus tard, dès fois 1 minutes, dès fois 2 minutes.... complètement aléatoire... donc pas bon!

Merci encore de ton aide..

Zinou

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...