Femto Posté(e) 6 septembre 2010 Share Posté(e) 6 septembre 2010 Bonjour, étant débutant dans la programmation sous la plateforme Android, ne m'en voulez pas si je me trompe un peu dans le vocabulaire "technique". Je me suis mis dans la tête de programmer une simple boite à meuh. Jusqu'à maintenant tout fonctionne parfaitement, j'ai réussi à utiliser l'accéléromètre à lancer un son etc. Mon réel problème est que à la fermeture du programme (quand j'appuie sur la touche retour) je peut continuer à utiliser ma boite à meuh (si je retourne mon telephone le son s'enclenche), situation que je ne comprend pas puisque dans l'événement onStop() je fais gaffe à fermer l'écouteur sur l'accéléromètre (unregisterListener), de même pour le mediaplayer (mais cette fois ci c'est dans l'événement onDestroy où j'ai "relase" mon media player). Aurais je oublier quelque chose ou tout ce que j'ai fais avant ne me sert à rien ? Merci d'avance pour votre aide :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Puni Posté(e) 6 septembre 2010 Share Posté(e) 6 septembre 2010 Ne peux-tu pas fermer le media player dans le onStop ? Je ne suis pas sûr, mais en faisant un retour ton application passe uniquement en arrière-plan... la methode onDestroy n'est appelée qu'au moment où le téléphone a besoin de mémoire et détruit ton activité... Le problème vient peut-être de là ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 6 septembre 2010 Auteur Share Posté(e) 6 septembre 2010 Il me semble que j'ai déjà essayé, je vais le refaire pour voir, mais d'un coté je te rappelle que mon son est enclenché par l'utilisation de l'accéléromètre, donc ça ne résout pas vraiment le problème vu que en arrière plan l'accéléro il travaille lors de la fermeture de mon appli (alors que j'essaye justement de fermer son listener dans le onStop()). J'espère que t'arrive à me suivre :P Edit: non toujours pas dis moi si j'ai faux: j'ai une variable Globale : SensorManager manager; Dans la procédure onCreate j'instancie le service (c'est comme ça qu'on dit ? ): manager= (SensorManager) getSystemService(Service.SENSOR_SERVICE); Dans la procédure onStart j'ouvre un listener sur mon accéléro: Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); manager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_UI); après la même chose dans la procédure OnStop mais en faisant "unregisterListener"; et je met monmediaplayer.release(); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 8 septembre 2010 Auteur Share Posté(e) 8 septembre 2010 petit up :/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 16 septembre 2010 Auteur Share Posté(e) 16 septembre 2010 Up :( Lien vers le commentaire Partager sur d’autres sites More sharing options...
houmiak Posté(e) 16 septembre 2010 Share Posté(e) 16 septembre 2010 essaye plutot de lancer le unregister dans le onPause. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chikenkilr Posté(e) 16 septembre 2010 Share Posté(e) 16 septembre 2010 Je plussoie pour le onPause(). En temps que super bon dev, t'a quand meme fais tourné ton prog en debug en mettant un breakpoint dans ta fonction onStop() afin de t'assurer quelle etait bien appelée quand tu appuies sur le bouton retour? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 16 septembre 2010 Auteur Share Posté(e) 16 septembre 2010 Justement depuis un petit moment j'ai mis des log dans mes activités onResume onStart onCreate, pour start et create je vois le log qui apparait pour ce qui est du resume il n'est pas appelé quand je fais retour. . . Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 16 septembre 2010 Auteur Share Posté(e) 16 septembre 2010 Pour exemple j'ai créer un nouveau projet de base helloworld: package com.cardoso.logcat; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class logcat extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { Log.i("","lancé on create"); super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void OnStop() { Log.i("","lancé onstop"); super.onStop(); } } Le résultat quand je lance j'ai bien le log du on create et j'ai remarquer ceci quand je ferme l'application avec la touche retour: no keyboard for id 0 En gros il ne détecterais pas ma touche retour ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
chikenkilr Posté(e) 16 septembre 2010 Share Posté(e) 16 septembre 2010 T'a essayé en remplacant le OnStop() par onPause()? (et bien sur en remplacant super.onStop() par super.OnPause()) Aussi, juste avant le fonction, rajoute le @Override, pour dire que tu reecrase la fonction d'origine. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 16 septembre 2010 Auteur Share Posté(e) 16 septembre 2010 Humm problème réglé je ne sais trop comment en recommençant mon projet de 0... Dans onPause je fais un "manager.unregisterListener(this,sensor);" pour virer l'écouteur sur mon capteur et dans onStop je met "mp.release();" pour virer le lecteur audio. Tout à l'air de bien fonctionner sauf des fois quand l'écran de mon application tourne de sens automatiquement. Il n'y a pas un moyen (en code) d'éviter la rotation auto sans toucher aux paramètres internet du télephonne ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
houmiak Posté(e) 16 septembre 2010 Share Posté(e) 16 septembre 2010 Pour exemple j'ai créer un nouveau projet de base helloworld:package com.cardoso.logcat; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class logcat extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { Log.i("","lancé on create"); super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void OnStop() { Log.i("","lancé onstop"); super.onStop(); } } Le résultat quand je lance j'ai bien le log du on create et j'ai remarquer ceci quand je ferme l'application avec la touche retour: no keyboard for id 0 En gros il ne détecterais pas ma touche retour ? Voila ton problème : Pas d'override de la fonction onStop, et pour cause, tu as créé une fonction OnStop (avec un o majuscule). En java, les majuscules minuscule ca compte! OnStop est différend de onStop! Lien vers le commentaire Partager sur d’autres sites More sharing options...
chikenkilr Posté(e) 16 septembre 2010 Share Posté(e) 16 septembre 2010 dans ton appli, dans le manifest, tu peux bloquer la rotation auto et forcer soit le mode portait soit le mode paysage : en fait, le système passes la gestion de la rotation a ton activité. Y'a une ligne a rajouter dans le manifest et dans la fonction onreate de ton activity si je ne m'abuse. J'ai pas le code sous les yeux la, mais si t'a pas eu de réponse d'ici ce soir, je pourrais te fournir un petit exemple de code. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chikenkilr Posté(e) 16 septembre 2010 Share Posté(e) 16 septembre 2010 Voila ton problème : Pas d'override de la fonction onStop, et pour cause, tu as créé une fonction OnStop (avec un o majuscule). En java, les majuscules minuscule ca compte! OnStop est différend de onStop! D'ou la grosse utilité de bien mettre les override (d'ailleurs eclipse fait chier quand on les oublies :D ). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 16 septembre 2010 Auteur Share Posté(e) 16 septembre 2010 Merci beaucoup de vos réponses ! Arf j'avais pas remarqué du premier coup que j'avais foutu une majuscule dans le onStop, d'ou le bon fonctionnement quand j'ai recommencer mon programme (vu que je l'ai écrit correctement après). @chikenkilr: Je vais cherche voir alors merci :). 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.