Bonjour,
Je suis débutant sur androïd. Mon projet ce de récupérer un rendez-vous dans un SMS. Quelqu’un pourrait m’aider s’il vous plait ?
Version imprimable
Bonjour,
Je suis débutant sur androïd. Mon projet ce de récupérer un rendez-vous dans un SMS. Quelqu’un pourrait m’aider s’il vous plait ?
Peut être en commencent par ici http://www.developpez.net/forums/d12...s-application/ ?
Merci beaucoup wax78,
je vais voir le lien
J'ai encore une question. J'ai déja fait quelque recherche et, j'arrive à récuperer le corp du message et l'affiché dans le logcat. Alors j'imagine que je viens de récuperer le corp du message,ou je me trompe? Si j'ai raison,mon problème est maintenant de récuperer la date et l'heure dans le corp du sms. Merci encore pour votre aide
Et bien au lieu de récupérer uniquement le champs BODY, récupère aussi le champs DATE :
Code:
1
2
3
4
5 ContentResolver cr =getContentResolver(); Uri uri = Uri.parse("content://sms/inbox"); Cursor messagesCursor = cr.query(uri, new String[] {,"body","date"}, null,null, null); //A toi de jouer...
Pour connaitre les champs disponibles, sous forme de constantes : https://developer.android.com/refere...msColumns.html
Merci Hephaistos007. En faite voilà mon code.
Alors vous peuvez m'expliquer comment je doit faire avec le code que vous m'avez donner.Pièce jointe 186828
Pour plus de precision mon but c'est de recuperer le message text qui contient une date mais pas la date d'arriver du sms.
Ah ok. Dans ce cas, oublies ma solution. Recherche simplement la présence d'une date dans le corps du message à l'aide d'une expression régulière. Pour t'aider, voici le motif à rechercher :
Code:static final String DATE_PATTERN = "(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)";
Merci beaucoup Hephaistos007.
je n'y arrive pas a faire quelque chose avec le motif que vous m'avez donné. Pouvez-vous me donner un petit coup de pousse?
c'est bon maintenant. Merci beaucoup pour votre aide. Juste une dernière question: es ce qu'il est possible d'envoyer des evenements dans l'agenda qui est déjà installé dans le telephone depuis une autre application?
Logiquement, à l'aide du ContentProvider de l'Agenda, tu peux insérer des données. http://developer.android.com/guide/t...-provider.html
Merci pour votre aide. Tous cela m'a beaucoup aidé.
J'ai encore besoin de votre aide s'il vous plait. j'ai essayé de recuperer des multiples de date dans le SMS pour mettre dans un tableau date[]. Et une erreur se produit (l'emulateur affiche que l'application s'est arrêté) sauf si je remplace date[] par String date. Alors j'ai changé le code (envoyer le message texte par intent vers un service) et j'ai de très gros problème maintenant par ce que peut import le code que j'essai de compiler l'erreur se produit toujours.
voilà l'erreur:
Aide moi s'il vous plaît.Code:
1
2
3
4 09-08 22:51:15.382: E/ThrottleService(164): problem during onPollAlarm: java.lang.IllegalStateException: problem parsing stats: java.io.FileNotFoundException: /proc/net/xt_qtaguid/iface_stat_all: open failed: ENOENT (No such file or directory) 09-08 22:52:00.392: I/Choreographer(467): Skipped 33 frames! The application may be doing too much work on its main thread.
et voila le code:
Code:
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; import android.widget.Toast; public class MainSms extends BroadcastReceiver { private final String ACTION_RECEIVE_SMS = "android.provider.Telephony.SMS_RECEIVED"; private static Pattern pattern; private static Matcher matcher; static final String DATE_PATTERN = "(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)"; String splitString; String[] date; String delim=" "; @Override public void onReceive(Context context, Intent intent) {Toast.makeText(context, "Action", Toast.LENGTH_SHORT).show(); 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(); for(SmsMessage message : messages) { String messagBody=messageBody.toLowerCase(); String[] messageSplit=messagBody.split(delim); int count=messageSplit.length; int j=0; for (int i=0; i<count;i++) { pattern = Pattern.compile(DATE_PATTERN); matcher = pattern.matcher(messageSplit[i]); if(matcher.find()) { date[j]=matcher.group(); Toast.makeText(context,date[j] , Toast.LENGTH_LONG).show(); j++; } } if (messagBody.contains("reunion")){ Log.i("",message.getOriginatingAddress()+"::"+message.getMessageBody()); Log.i("",message.getOriginatingAddress()+"::"+messagBody); } Toast.makeText(context, "Parfait", Toast.LENGTH_SHORT).show(); } } } } } }
Le traitement dans onReceive() est probablement trop long. Un BroadcastReceiver est juste là pour intercepter un évènement et ne dois pas prendre plus de quelques milli-secondes. Dans ton cas, transfères l'intent à un Service qui pourra réaliser le traitement.
J'ai essayé de compiler un simple BroadcastReceiver mais ça reste toujours le même.
Code:
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 package com.exampleSm.sm; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; import android.widget.Toast; public class MainSms extends BroadcastReceiver { private final String ACTION_RECEIVE_SMS = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) {Toast.makeText(context, "Action", Toast.LENGTH_SHORT).show(); 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(); for(SmsMessage message : messages) { Log.i("",message.getOriginatingAddress()+"::"+message.getMessageBody()); }} } } } }
je crois maintenant que l'erreur vient de l'eclipse ou d'android parce que j'ai essayé de faire un nouveau projet "activite". Je ne modifie rien?J'ai tout de suite lencé l'application mais l'emulateur n'affiche même pas "Hello word". Je devais faire à votre avis?
Bonjour,
Maintenant il n'y a plus d'erreur mais pouvez-vous me dire qu'est ce qui ne vas pas dans ce code. L'emulateur n'affiche plus le toast.
Voici le manifest:Code:
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 package com.exampletoast.toastexemple; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; public class MonToast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { 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]); String message = messages[i].getMessageBody(); Toast.makeText(context,message,Toast.LENGTH_SHORT).show(); } } } }}
Code:
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 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.exampletoast.toastexemple" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="20" /> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name=""/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name=".MonToast" android:enabled="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </receiver> </application> </manifest>