Aller au contenu

Problème lors de la fermeture de mon programme


Femto

Recommended Posts

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

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

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

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

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

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

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

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

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

Archivé

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

×
×
  • Créer...