Jump to content
Sign in to follow this  
Hhugues

[RESOLU]Passer des ordres entre Activity

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 !

Edited by Hhugues

Share this post


Link to post
Share on other 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");

Edited by Fluckysan

Share this post


Link to post
Share on other sites

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 ?

Edited by Hhugues

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other 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 !

Share this post


Link to post
Share on other 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

Edited by popolbx

Share this post


Link to post
Share on other 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

Edited by Hhugues

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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);

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  





×
×
  • Create New...