Zinou6987 Posté(e) 16 septembre 2010 Share Posté(e) 16 septembre 2010 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 More sharing options...
ichpa Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 Bonjour, Quelle est la méthode bloquante ? Le lancement du player, la vibration ou les deux ? Peux-tu publier ton code pour y voir plus clair ? ichpa Lien vers le commentaire Partager sur d’autres sites More sharing options...
Zinou6987 Posté(e) 17 septembre 2010 Auteur Share Posté(e) 17 septembre 2010 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 More sharing options...
ichpa Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 Vu comme ça, difficile de voir le problème. Si tu n'arrive à résoudre le problème, je tenterai de le reproduire chez moi. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Zinou6987 Posté(e) 17 septembre 2010 Auteur Share Posté(e) 17 septembre 2010 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 More sharing options...
Zinou6987 Posté(e) 17 septembre 2010 Auteur Share Posté(e) 17 septembre 2010 C'est bon j'ai trouvé... j'ai résolu mon problème avec un BroadcastReceiver qui envoi une notification.... je posterai mon code plus tard! Merci de ton aide en tout cas ;) ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.