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
Là voici la classe qui va recevoir le sms :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface MessageListener{ void messageRecu(String numero, String 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
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); } } }
Le problème c'est que lorsque je reçois un sms, j'appelle bien fireMessageReceived() mais _messageListeners est vide.
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); } });
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
Partager