Bonjour à tous !

Depuis un petit moment j'essaye de générer un évènement sur la réception d'un sms.

Voici le code de l'interface de de mon listener
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
public interface MessageListener{
	void messageRecu(String numero, String message);
}
Là voici la classe qui va recevoir le sms :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
public class Messager extends BroadcastReceiver {
 
	private static final String EN_TETE = "[EnqueteSpecialeMessage]";
 
	private final String ACTION_RECEIVE_SMS = "android.provider.Telephony.SMS_RECEIVED";
 
	// Collection d'écouteurs d'évènements
	private final Collection<MessageListener> _messageListeners = new ArrayList<MessageListener>();
 
	@Override
	public void onReceive(Context context, Intent intent) {
		if (intent.getAction().equals(ACTION_RECEIVE_SMS)) {
			Bundle bundle = intent.getExtras();
			if (bundle != null) {
				Object[] pdus = (Object[]) bundle.get("pdus");
 
				final SmsMessage[] messages = new SmsMessage[pdus.length];
				for (int i = 0; i < pdus.length; i++) {
					messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
				}
				if (messages.length > -1) {
					final String messageBody = messages[0].getMessageBody();
					final String phoneNumber = messages[0]
							.getDisplayOriginatingAddress();
 
					if (messageBody.startsWith(EN_TETE)) {
						// On lance l'évennement sur les listener
						fireMessageReceived(phoneNumber,
								messageBody.substring(EN_TETE.length()));
						// On supprime le message
						abortBroadcast();
					}
				}
			}
		}
	}
 
	public void addMessageListener(MessageListener listener) {
		_messageListeners.add(listener);
	}
 
	public void removeMessageListener(MessageListener listener) {
		_messageListeners.remove(listener);
	}
 
	public Collection<MessageListener> getMessageListeners() {
		return _messageListeners;
	}
 
	protected void fireMessageReceived(String numero, String message) {
		for (MessageListener listener : _messageListeners) {
			listener.messageRecu(numero, message);
		}
	}
}
Et là j'ajoute une instance de mon listener à ma classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
			_messager.addMessageListener(new MessageListener() {
				@Override
				public void messageRecu(String numeroExpediteur,
						String contenuMessage) {
					message.setText("Numéro : " + numeroExpediteur
							+ "\nMessage : " + contenuMessage);
				}
			});
Le problème c'est que lorsque je reçois un sms, j'appelle bien fireMessageReceived() mais _messageListeners est vide.

Je pense que c'est dû au fait que la création de l'instance et le déclenchement de l'évènement se réalise sur deux threads différents .

Voilà je ne sais pas comment résoudre le problème