Jump to content

Paramètre d'application.


malgache

Recommended Posts

Bonjour,

Pour mon application Android j'ai crée deux point d'entrée, un vers application.java et un vers settings.java. J'ai crée pour chacun une activity.

Mais j'ai un souci, quand je veux récup les paramètres dans settings.java et les modifier, ce n'est pas pris en compte dans application.java et inversement.

Et ce que mes deux activity de la même appli ne peuvent pas partager des param d'application?

Du coup vous avez une idée sur la manière à adopter pour pouvoir gérer ça?

Link to comment
Share on other sites

Ben quand je dis deux point d'entré, c'est que j'ai défini deux activitées dans mon manifest:

<activity 
       	android:windowSoftInputMode="adjustResize"
       	android:name=".Application"
           android:label="@string/app_name"
           android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
       <activity 
       	android:windowSoftInputMode="adjustResize"
       	android:name=".Settings"
           android:label="@string/app_name_setting"
           android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>

Je veux juste stocker une paramètres de type booléen qui servira à savoir si il a demandé à ce que le message d'autorisation de connexion internet ne soit plus affiché.

A la base j'ai utilisé ça pour récupere:

private SharedPreferences settings;

public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
settings = getPreferences(0);
nePlusAfficher = settings.getBoolean("nePlusAfficher", false);
}

Et pour stocker

SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("nePlusAfficher",checked);
editor.commit();

Donc quand je le fais dans mon activity Application, tant que je suis dedans, je peux travailler sur les paramètres, si je ferme l'appli, et que je vais sur mon activity Setting, quand je veux récupérer, il agit comme si il ne connaissais pas ce paramètre...Et donc si je le modifie dans le Setting, c'est logiquement pas pris en compte dans mon activity Application

Link to comment
Share on other sites

Si c'est un booléen, tu peux le mettre en ressources XML dans le dossier res/values ça peut peut-être marcher.

Ensuite tu as deux acitivity de type "main", c'est vraiment nécessaire ? Comment passes tu de l'une à l'autre ?

Parce que la méthodes des préférence est la bonne à mon avis, mais c'est à condition de n'avoir qu'un main.

Link to comment
Share on other sites

Je suis un peu nouveau dans la programmation Android, donc je comprend pas vraiment tout les termes :x

T'entend quoi par activity de type main?

En faite, j'ai mon activity principal, celle de mon appli. Et quand on clique sur ne plus affiché le message pour autorisé la connexion internet, ben quand l'appli se lance, ca utilise directement une connexion internet. Je voulais permettre à l'utilisateur de modifier ce paramètre sans avoir à lancer l'activity principal de mon appli. Du coup on m'a conseillé de crée un deuxième point d'entrée, j'ai fait une classe Settings que j'ai extend de Activity avec un layout associé pour l'affichage du paramètre.

Donc j'ai pas réellement de transition entre mes deux activity, simplement qu'en gros j'ai deux icones sur le bureau, un pour lancer l'activity principal et un pour le l'activity setting...

Link to comment
Share on other sites

Je vais essayer d'etre plus compréhensible ;)

par main j'entends

android.intent.action.MAIN

et surtout

android.intent.category.LAUNCHER

Donc tu peux lancer ton activité de deux endroit, ce que je trouve bizarre.

Perso j'utiliserai qu'une entrée, la principale, et je sauvegarderai les paramètres avec les préférences comme tu fais et ensuite en fonction de ces paramètres je lancerai directement la connexion ou je la demanderai.

// L'intent qui permet de lancer une autre activity
Intent defineIntent = new Intent(lecontext, FenetreClass2.class);

// objet qui vas nous permettre de passe des variables
Bundle objetbunble = new Bundle();
objetbunble .putString("ma_variable", "ma_valeur");

// envoi des variables à l'activité
defineIntent.putExtras(objetbunble );

// démarrage de l'activité
lecontext.startActivity(defineIntent);

Et ensuite dans ta deuxième activité bah tu fais le traitement que tu faisais.

Ou meme mieux, tu n'as qu'une activité qui garde ses préférences et qui lance la connexion en fonction :lol:

Si tu veux maintenir ta solution alors je ne peux pas t'aider, peut etre un autre dev qui passe par la aura la solution !

Sinon, moyen ultime pour la sauvegarde de données c'est une base sql dans le tel mais bon, à n'utiliser qu'en dernier recours car ça consomme beaucoup de ressources et dans le cas d'une seule variable ça me semble inapproprié.

Link to comment
Share on other sites

Je pense avoir compris ce que tu veux dire, mais je suis pas sur que ce soit compatible avec ce que je veux.

Perso j'utiliserai qu'une entrée, la principale, et je sauvegarderai les paramètres avec les préférences comme tu fais et ensuite en fonction de ces paramètres je lancerai directement la connexion ou je la demanderai.

C'est exactement ce que j'avais au début.

En faite je t'explique comment fonctionne mon appli.

Quand tu la lance, une alert s'affiche:

L'application va utiliser une connexion internet, voulez-vous continuer? Oui/Oui, ne plus afficher ce message/Non

Si il clique sur Oui, je laisse mon paramètre nePlusAffiche à false, mais si il clique sur "Oui, ne plus afficher" alors je passe le paramètre nePlusAffiche a true, et du coup, à chaque fois que l'appli sera relancer, ca chargera directement les info en utilisant la connexion internet.

Du coup j'ai voulu permettre à l'utilisateur d'annulé cette connexion, sans avoir à passé par l'activity principale vu qu'elle charge directement une connexion, c'est pour cela que j'ai crée un deuxième point d'entrée.

Et du coup au lieu d'utiliser getPreference() j'ai du utiliser getSharedPreference(). En faite getPreference() c'est pour les paramètre d'Activity...

Link to comment
Share on other sites

Ok bah j'ai une alternative à te proposer alors, offre lui le choix et crée ton activity qui s'ouvre au bouton menu par exemple et affiche une page setting, comme la plupart des applications.

Edit : je ne connais pas la réponse pour ton problème initial : passer des infos entre deux activity type launcher/main; je peux juste te proposer des alternatives qui me semblent plus réalisable avec un seul main.

Link to comment
Share on other sites

décidément j'ai du mal à me faire comprendre aujourd'hui :)

Sur ton téléphone tu as trois boutons en dessous de l'écran, le bouton home avec la maison, le bouton retour arrière avec la flèche et le bouton menu avec les 3 lignes.

Sur la plupart des appli, l'appui du bouton menu ouvre un encart et offre des possibilités supplémentaire comme les setting par exemple.

Un simple bouton peut aussi faire l'affaire.

Le but de cette manoeuvre de bouton est juste de créer un lien vers ton autre activity de réglages.

Link to comment
Share on other sites

Ahh ok, désolé je pense que j'avais eu du mal à comprendre parce que je n'ai pas de télphone sous Androïd.

J'avoue que ton idée est très interessante, mais j'ai une question, est-ce que la plus part (voir tous) les téléphones qui fonctionnent sous Androïd possèdent ce bouton?

Link to comment
Share on other sites

Bon je vais te donner la réponse à ton problème.

En fait, quand tu fais getPreferences(0), tu n'accèdes au préférences que de cette activité.

Toi, ce que tu cherche, c'est ceci:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Là, ces préférences sont accessible partout..

Link to comment
Share on other sites

Merci pour ta reponse pauland, mais j'ai déjà solutionner le problème, mais je suis un peu curieux.

Quand on fait: getDefaultSharedPreferences(this); ca charge les paramètres par défault? et on peut passer this en paramètre?

Link to comment
Share on other sites

getDefaultSharedPreferences(this); pointe vers le fichier par défaut de ton context actuel

Donc quand tu es dans ton activité, tu peux utiliser this (ton activité donc) car Activity est hérité de Context

java.lang.Object

↳ android.content.Context

↳ android.content.ContextWrapper

↳ android.view.ContextThemeWrapper

↳ android.app.Activity

Link to comment
Share on other sites

Okok, merci pour l'information.

Mais du coup, si je décide de changé par cette solution, je reviendrai pas à la même situation qu'avec getPreferences() ??

Parce que si j'ai bien compris, si j'utilise this, ca va charger les préférences de mon Context, en l'occurrence mon Acitivty. Et si je le fais dans la deuxième Activity, ca va charger les préférences de la deuxième Activity, du coup il n'y aurai pas de liaison entre les deux Activity au niveau des préférences non?

Link to comment
Share on other sites

Okok, merci pour l'information.

Mais du coup, si je décide de changé par cette solution, je reviendrai pas à la même situation qu'avec getPreferences() ??

Parce que si j'ai bien compris, si j'utilise this, ca va charger les préférences de mon Context, en l'occurrence mon Acitivty. Et si je le fais dans la deuxième Activity, ca va charger les préférences de la deuxième Activity, du coup il n'y aurai pas de liaison entre les deux Activity au niveau des préférences non?

Non, en fait quand tu appelles getDefaultSharedPreferences(this); tu pointes toujours vers le même fichier de paramètres (quelque soit l'activité depuis laquelle du l'appelle)

Le plus simple est que tu fasses un test (genre nouveau projet avec 2 activités)

Link to comment
Share on other sites

Okok, je testerai un peu plus tard, la j'ai utilisé getSharedPreference(nomFichier,mode) et ca fonctionne. Je préfère ne pas me lancer dans du changement (même si ca doit se mettre en place rapidement) vu que c'est un projet pour mon stage qui se termine le 17 et qu'il faut encore que je fasse mon rapport dans lequel j'explique tout, et j'ai déjà fait cette partie, je me sens pas de revenir dessus pour l'instant. Mais une fois le tout bouclé je regarderai ;).

En tout cas, merci beaucoup pour vos informations =)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...