Aller au contenu

[RESOLU]Passer des ordres entre Activity


Hhugues

Recommended Posts

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é par Hhugues
Lien vers le commentaire
Partager sur d’autres sites

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é par Fluckysan
Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

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é par popolbx
Lien vers le commentaire
Partager sur d’autres sites

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é par Hhugues
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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);

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...