Bonjour,
Je cherche à faire une appli qui attend un sms particulié de la forme :
#contact#;nom;prenom;phone;adresse;cp;ville;email
ce sms est envoyé par un script de mon site et a pour but final de fournir les infos nécessaire à l'ajout d'un contact. (toutes les infos y sont à chaque fois).

J'ai suivi le super tuto sur les BroadcastReceiver good job !
mon problème ce situ surtout sur la partie enregistrer le contact ...

je suis une quiche en java, et j'ai pas l'intention d'être bon dans un avenir proche je veux juste faire cette petite application qui me sera forte utile pour gagner du temps.

De se que j'ai compris, je n'ai besoin d'écrire que 2 fichiers (le manifeste et la classe SMSReceiver)
voici mon travail actuel (qui ne fonctionne pas) j'ai trouvé plusieurs méthodes sur le net, et j'ai essayé de coller aux recommandation de la doc officiel.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
package sms.add.contact;
 
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.ContentUris;
import android.content.ContentValues;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.os.Bundle;
import android.net.Uri;
import android.telephony.SmsMessage;
 
public class SMSReceiver extends BroadcastReceiver
{
	 private final String   ACTION_RECEIVE_SMS  = "android.provider.Telephony.SMS_RECEIVED";
 
	 @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();
					 if (messageBody.substring(0,8) == "#contact#")
					 {
					 	//messageBody structure : "#contact#;nom;prenom;phone;adresse;cp;ville;email"
						String infoContact[] = messageBody.split(";");
 
						//création de l'id
						ContentValues values = new ContentValues();
					    values.put(RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim");
					    values.put(RawContacts.ACCOUNT_NAME, "SIM");
					    Uri rawContactUri = context.getContentResolver().insert(RawContacts.CONTENT_URI, values);
					    long rawContactId = ContentUris.parseId(rawContactUri);
 
					    // infoContact[1] = "nom";
						// infoContact[2] = "prenom";
					    values.clear();
					    values.put(Data.RAW_CONTACT_ID, rawContactId);
					    values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
					    values.put(StructuredName.DISPLAY_NAME, infoContact[1]+" "+infoContact[2]);
					    values.put(StructuredName.GIVEN_NAME, infoContact[2]);
					    values.put(StructuredName.FAMILY_NAME, infoContact[1]);
					    context.getContentResolver().insert(Data.CONTENT_URI, values);
 
					    // infoContact[3] = "phone";
					    values.clear();
					    values.put(Data.CONTACT_ID, rawContactId);
					    values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
					    values.put(Phone.NUMBER, infoContact[3]);
					    values.put(Phone.TYPE, Phone.TYPE_MOBILE);
					    context.getContentResolver().insert(Data.CONTENT_URI, values);
 
					    // infoContact[4] = "adresse";
					    // infoContact[5] = "cp";
						// infoContact[6] = "ville";
					    values.clear();
					    values.put(Data.CONTACT_ID, rawContactId);
					    values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
					    values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);
					    values.put(StructuredPostal.STREET, infoContact[4]);
					    values.put(StructuredPostal.POSTCODE, infoContact[5]);
					    values.put(StructuredPostal.CITY, infoContact[6]);
					    context.getContentResolver().insert(Data.CONTENT_URI, values);
 
					    // infoContact[7] = "email";
					    values.clear();
					    values.put(Data.CONTACT_ID, rawContactId);
					    values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
					    values.put(Email.DATA1, infoContact[7]);
					    values.put(Email.TYPE, Email.TYPE_HOME);
					    context.getContentResolver().insert(Data.CONTENT_URI, values); 
					 }
				 }
			 }
		}
	}
}
Sur la doc officiel le getContentResolver() n'est jamais précédé de context, mais a la compilation : "The method getContentResolver() is undefined for the type SMSReceiver" (en gros il me dit de redefinir la méthode, si c'est ça : comment fait-on ? )
Même en important : android.content.ContentResolver; (je l'ai retiré parce qu'eclipse me dit que je ne l'utilise pas ...)
Donc en gros j'ai mis "context." devant pour qu'il puisse trouver la méthode .... logique ? j'en sais rien ... mais ça ne m'enregistre toujours pas le contact.
Je suis vraiment pas habitué à java, alors si quelqu'un saurais me dire si je suis sur la bonne voie, voir pitetre me donner un indice.

pour info voici mon manifest :
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
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="sms.add.contact"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk android:minSdkVersion="10" />
	<application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> 
          <receiver class="sms.add.contact.SMSReceiver"
            android:name="sms.add.contact.SMSReceiver">
            <intent-filter android:priority="100">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
     </application>
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
	<uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
 
</manifest>
Si vous êtes arrivé a cette phrase, merci de m'avoir lu