Hhugues Posté(e) 11 septembre 2009 Share Posté(e) 11 septembre 2009 (modifié) Bonjour, J'ai à nouveau une question... Lorsque qu'on a plusieurs Activity au sein d'un même programme comment fait on en sorte que l'un donne un ordre à l'ordre ? J'illustre : j'ai une activity A qui crée par new Intent(this, B.class) une activity B. Comment de la classe A, donne on à B l'ordre d'exécuter une certaine methode (par exemple : B.clear() ) Je vous remercie ! Modifié 15 septembre 2009 par Hhugues Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 11 septembre 2009 Share Posté(e) 11 septembre 2009 (modifié) Chaque Activity agira "seule" sans qu'une autre lui donne un "ordre" (grossièrement) Par contre tu peux passer des informations entre tes Activity via les intents (qui peut déterminer la méthode que tu veux exécuter) Par exemple : Intent myIntent = new Intent(this, SecondActivity.class); myIntent.putExtra("myInfo", "This is good !"); Et pour récupérer l'info dans SecondActivity : Bundle bundy = this.getIntent().getExtras(); String myCoolInfo = bundy.getString("myInfo"); Modifié 11 septembre 2009 par Fluckysan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 11 septembre 2009 Auteur Share Posté(e) 11 septembre 2009 (modifié) D'accord. Mais est-il courant qu'une application aie plusieurs intents ? Moi la mienne en a 4 pour le moment et elle est simple... Est-il préférable de limiter le nombre ? Modifié 11 septembre 2009 par Hhugues Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 11 septembre 2009 Share Posté(e) 11 septembre 2009 Tout dépend comment tu gères la cinétique de ton appli, mais ce n'est pô génant d'en avoir plusieurs nop :o Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 13 septembre 2009 Auteur Share Posté(e) 13 septembre 2009 Et bien je reviens avec une autre question. Mettons que je mette une information avec putExtra, disons : myIntent.putExtra("ordre","destroy_database") Existe-t-il un truc automatique qui permet de détecter que des informations ont bien été mises, et qui permet de déclencher des actions ? (une sorte de service ou daemon qui inspecte en permanance en cas de modifications de ce type de variables) Je sais pas si je suis très clair :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 13 septembre 2009 Share Posté(e) 13 septembre 2009 bah non....c'est ton activity de réception qui doit vérifier les infos.... c'est pas très clair ...car ton intent va activer une activity, ou service ou broadcast. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 13 septembre 2009 Auteur Share Posté(e) 13 septembre 2009 En fait mon problème est le suivant. (Que l'on me corige si j'ai faux) J'ai une activity A qui a commencé une activity B par une intent. Puis on est revenu sur l'activity A laissant donc l'activity B en mode "Pause". A envoie un message via putExtra : myIntent.putExtra("ordre","destroy_database") Comment faire en sorte qu'à ce momnt l'activity B fasse ce qu'on lui a demandé c'est à dire détruire la base de données. Je vous remercie ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
xma Posté(e) 13 septembre 2009 Share Posté(e) 13 septembre 2009 Je ne sais pas si tu as déjà vu ça: http://android.cyrilmottier.com/?p=102 C'est un bon document pour découvrir les Intents je trouve Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 13 septembre 2009 Share Posté(e) 13 septembre 2009 (modifié) Comment faire en sorte qu'à ce momnt l'activity B fasse ce qu'on lui a demandé c'est à dire détruire la base de données. Je vous remercie ! justement là pour ces cs là il faut faire un broadcast ou un service. Tu fais un broadcast que tu appelles par exemple (ça va faire sourire) DatabaseKiller. Tu enregistre ce broadcast comme récepteur de l action "database.kill".... et tu lance une intent avec une action "database.kill". Ton broadcast va alors se lancer. il ne devra faire qu'une action : killer la base. Android est programmé "à la tâche", une activity a une tâche précise. Il ne faut plus penser en usine à gaz windows ou kde ^^ Mais plutot en WebServices. Action = broadcast/service edit : voir BroadcastReceiver dans la doc Modifié 13 septembre 2009 par popolbx Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 13 septembre 2009 Auteur Share Posté(e) 13 septembre 2009 (modifié) Ok j'avoue que moi ma programmation est à la tonton débrouille. Je vais voir les liens et me renseigner sur tout ça Je vous remercie. PS : une dernière question, par exemple on crée une base de Donnée dans une Activity B créée par A. Comment faire pour passer l'adresse (enfin la variable) qui pointe vers cette base de donnée facilement ? Moi je le fais par un truc très moche avec un static getTable dans l'activity B, mais je pense pas que ce soit très convenable ! Merci Modifié 13 septembre 2009 par Hhugues Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 13 septembre 2009 Share Posté(e) 13 septembre 2009 ah ah ! bein déjà mets le traitement de la base dans une autre classe.... avec si tu veux des accesseurs statiques. Mais il y a plus simple pour les bases de données. Tu crée un DatabaseHelper qui va gérer comme un grand ta base de donnée tout seul... mais là c'est un nouveau topic qu'il faudra faire ;) je te re réponds pour ton premier cas, j ai justement le problème lié à mon appli KeepScreen (je corrige un bug). J ai donc besoin de couper un service si l ecran s'éteind. Je crée donc un BroadCastReceiver dédié. Je le fais et je te post le code. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 13 septembre 2009 Share Posté(e) 13 septembre 2009 Voilà donc le code de mon Broadcast...; très simple il pose un flag sur mon Service pour qu'il ne bloque pas l'écran. package com.tni.KeepScreen; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.util.Log; public class ScreenOffReceiver extends BroadcastReceiver{ public static final ScreenOnReceiver _screenOnReceiver = new ScreenOnReceiver(); @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.SCREEN_OFF")){ if(KeepService.isAlive()){ KeepService.disableScreenLock(); context.registerReceiver(_screenOnReceiver, new IntentFilter("android.intent.action.SCREEN_ON")); } } } } .... Je ne mets pas son action dans le manifest, car sinon mon applie se lancerai à chaque fois que l'écran s'éteind, et pleins de gens enverraient un mail au créateur de taskiller pour lui dire que son appli est buguée et que des applis jamais lancées apparaissent ^^ Donc je l'enregistre manuellement quand j en ai besoin: Dans mon service j ai un private static final ScreenOffReceiver _screenOffReceiver = new ScreenOffReceiver(); ..... //j enregistre mon broadcast sur l action extinction d'écran registerReceiver(_screenOffReceiver, new IntentFilter("android.intent.action.SCREEN_OFF")); .... //et je le deseregistre en fermant le service..sinon pleins d erreurs dans le logcat unregisterReceiver(_screenOffReceiver); Si je voulais lancer manuellement l action je ferais: Intent i = new Intent(); i.setAction("android.intent.action.SCREEN_OFF"); sendBroadcast(i); Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 14 septembre 2009 Auteur Share Posté(e) 14 septembre 2009 Je vais regarder ça plus en détail, car je "commence". Merci beaucoup popolbox Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.