Zinou6987 Posted September 16, 2010 Share Posted September 16, 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 Link to comment Share on other sites More sharing options...
ichpa Posted September 17, 2010 Share Posted September 17, 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 Link to comment Share on other sites More sharing options...
Zinou6987 Posted September 17, 2010 Author Share Posted September 17, 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 Link to comment Share on other sites More sharing options...
ichpa Posted September 17, 2010 Share Posted September 17, 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. Link to comment Share on other sites More sharing options...
Zinou6987 Posted September 17, 2010 Author Share Posted September 17, 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 Link to comment Share on other sites More sharing options...
Zinou6987 Posted September 17, 2010 Author Share Posted September 17, 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 ;) ! Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.