Bonjour,
une fois un sms envoyé, est-il possible de savoir s' il a bien été envoyé ? afin de pouvoir, par exemple, en envoyer un autre ?!
Merci !![]()








Bonjour,
une fois un sms envoyé, est-il possible de savoir s' il a bien été envoyé ? afin de pouvoir, par exemple, en envoyer un autre ?!
Merci !![]()
Bonjour,
Oui c'est possible ,
http://developer.android.com/referen...ndingIntent%29
Ce PendingIntent te retournera un status que tu auras passer en paramètre lors de la réception du SMS .
Code : Sélectionner tout - Visualiser dans une fenêtre à part ArrayList<PendingIntent> deliveryIntent








Ok merci !
Mais si c'est un service qui envoie un sms, ou dois-je avoir la méthode onActivityResult ??? Dans mon TimerTask ?!
et pourquoi utiliser un tableau d'Intent ?!
[quotesi c'est un service qui envoie un sms, ou dois-je avoir la méthode onActivityResult ??? Dans mon TimerTask ?![/QUOTE]
C'est un BroadcastReceiver.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 BroadcastReceiver tonbroadcast = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK:
et pourquoi utiliser un tableau d'Intent ?!l'Array n'est que si tu envoie les messages avec sendMultipartTextMessage , tu peux avoir un broadcast recever par messagepublic void sendMultipartTextMessage (String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents)
Since: API Level 4
Send a multi-part text based SMS. The callee should have already divided the message into correctly sized parts by calling divideMessage.
Parameters
destinationAddress the address to send the message to
scAddress is the service center address or null to use the current default SMSC
parts an ArrayList of strings that, in order, comprise the original message
sentIntents if not null, an ArrayList of PendingIntents (one for each message part) that is broadcast when the corresponding message part has been sent. The result code will be Activity.RESULT_OK for success, or one of these errors:
RESULT_ERROR_GENERIC_FAILURE
RESULT_ERROR_RADIO_OFF
RESULT_ERROR_NULL_PDU
For RESULT_ERROR_GENERIC_FAILURE each sentIntent may include the extra "errorCode" containing a radio technology specific value, generally only useful for troubleshooting.
The per-application based SMS control checks sentIntent. If sentIntent is NULL the caller will be checked against all unknown applications, which cause smaller number of SMS to be sent in checking period.
deliveryIntents if not null, an ArrayList of PendingIntents (one for each message part) that is broadcast when the corresponding message part has been delivered to the recipient. The raw pdu of the status report is in the extended data ("pdu").
Throws
IllegalArgumentException if destinationAddress or data are empty
public void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
Since: API Level 4
Send a text based SMS.
Parameters
destinationAddress the address to send the message to
scAddress is the service center address or null to use the current default SMSC
text the body of the message to send
sentIntent if not NULL this PendingIntent is broadcast when the message is successfully sent, or failed. The result code will be Activity.RESULT_OK for success, or one of these errors:
RESULT_ERROR_GENERIC_FAILURE
RESULT_ERROR_RADIO_OFF
RESULT_ERROR_NULL_PDU
For RESULT_ERROR_GENERIC_FAILURE the sentIntent may include the extra "errorCode" containing a radio technology specific value, generally only useful for troubleshooting.
The per-application based SMS control checks sentIntent. If sentIntent is NULL the caller will be checked against all unknown applications, which cause smaller number of SMS to be sent in checking period.
deliveryIntent if not NULL this PendingIntent is broadcast when the message is delivered to the recipient. The raw pdu of the status report is in the extended data ("pdu").
Throws
IllegalArgumentException if destinationAddress or text are empty
Sinon utilise sendmessage qui lui n'a qu'un seul PendingIntent![]()








Bonjour,
Dans quel cas utiliser un multi???
Pense tu que c'est possible d'en envoyer plusieurs à la suite ou tu crois qu'il y a une restriction à ce niveau ?? du genre pas plus d'un message toutes les 5 mn ?!
Bonjour,
Donc le multi est utile si ton message contient plus de 160 bytes .After you define your own SmsManager, you can divide your SMS message by 160 bytes. (Optional, if your SMS always less than 160 bytes, you can pass this part)
http://mobdev.olin.edu/mobdevwiki/Fr...MS%20Messaging
Personnellement je ne pense pas ...tu crois qu'il y a une restriction à ce niveau ?? du genre pas plus d'un message toutes les 5 mn ?!








ok cool merci !!








Hum il y a un truc que je comprend pas, dans ton tuto il dise qu'il faut mettre le traitement d'après l'envoie dans le onReceived, mais moi c'est la que je lance mon service :
Le truc c'est que je voudrais savoir par exemple si mon message à bien été envoyé, et s'il n'a pas bien été envoyé, il faudrait que je puisse soit recommencé, soit renseigné un champs de ma BDD pour que je le renvoie plus tard ... mais la je sèche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Override public void onReceive(Context context, Intent intent) { Log.i("", "Boot Event"); try{ Intent serviceIntent = new Intent(); serviceIntent.setClassName("com.xxx", "com.xxx.BackgroundService"); context.startService(serviceIntent); } catch (Exception e) { e.printStackTrace(); } }!








et son pendingIntent va vers :
L'activity SMS_SENT, donc c'est cette activity qui gère le résultat nan ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public static final String SMS_SENT_ACTION="com.tilab.msn.SMS_SENT";
Euh , tu vas trop vite ,
Je n' avais pas compris au premier abord , mais ce qu'il t'explique c'est le onReceive du programme de réception du SMS .Hum il y a un truc que je comprend pas, dans ton tuto il dise qu'il faut mettre le traitement d'après l'envoie dans le onReceived, mais moi c'est la que je lance mon service :
ton BroadCast doit être directement dans ta classe et il n'a pas besoin d'action déclaré dans le manifest , puisque c'est le pendingIntent qui l'appellera .
Edit :
C'est l'action que tu associes à ton PendingIntent , donc dans le BroadCast il te suffit de récupérer l'action associé pour savoir quel PendingIntent t'as appeléet son pendingIntent va vers :
Code :
public static final String SMS_SENT_ACTION="com.tilab.msn.SMS_SENT";
L'activity SMS_SENT, donc c'est cette activity qui gère le résultat nan ?








Donc en gros c'est une activity qui n'en est pas vraiment une ?ton BroadCast doit être directement dans ta classe et il n'a pas besoin d'action déclaré dans le manifest , puisque c'est le pendingIntent qui l'appellera .
oui mais dans le onReceive j'ai mon boot event, je fais comment pour différencier les 2 cas ?!C'est l'action que tu associes à ton PendingIntent , donc dans le BroadCast il te suffit de récupérer l'action associé pour savoir quel PendingIntent t'as appelé
Non c'est un IntentDonc en gros c'est une activity qui n'en est pas vraiment une ?, avec une action associée , ne confonds pas Intent et Activity .
C'est pas le même Broadcast exempleoui mais dans le onReceive j'ai mon boot event, je fais comment pour différencier les 2 cas ?!
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 PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent("action envoie"), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent("action delivre"), 0); registerReceiver(tonbroadcastdenvoie, new IntentFilter("action envoie")); // ---when the SMS has been delivered--- registerReceiver(tonbroadcastlorsquelemessageestdelivre, new IntentFilter( "action delivre")); SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("adresse", null, message, sentPI,deliveredPI); BroadcastReceiver tonbroadcastdenvoie = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { // tu regardes si le result de l'intent est OK // tu regardes a quel message il appartien en regardant le nom de l'action dans l'intent } } BroadcastReceiver tonbroadcastlorsquelemessageestdelivre = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { // tu regardes si le result de l'intent est OK // tu regardes a quel message il appartien en regardant le nom de l'action dans l'intent } }








ok je vais étudier ça cet aprem je te tiens au jus !![]()








Ok donc pour ce qui est du broadcast receiver je pense que c'est bon mais il va falloir que je fasse des test réel, par contre si j'ai bien compris l'action que je vais recevoir ça va être soit : "action delivre" ou "action envoie" ???
Donc comment je peux chopper le statut du SMS, pour savoir s'il est en cours d'envoie ou bloqué car pas de réseau??? J'ai vu que les statut serve à ça mais je vois pas comment les choppers : STATUS_ON_ICC_FREE, etc
merci de ton aide !![]()








Je viens de faire un test réel, donc je ne sais pas si mes SMS ont vraiment été envoyé ou s'il sont en erreur ou en attente. Bref j'ai mi un log dans mon receiver mais celui-ci ne se lance pas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @Override public void onReceive(Context context, Intent intent) { Log.i("", "SMS RECEIVER"); Log.i("", "SMS RECEIVER ACTION :" + intent.getAction()); }mIntentPI est initialisé plus haut, peut être faut-il que j'en recrée une absolument à chaque itération ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for(int i = 0; i < mMsgList.size() ; i++) { mIntentPI.putExtra("SubSmsNum", (mMsgList.size() > 1)? "Part " + i + " of SMS " : "SMS "); PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, mIntentPI, 0); mIntentPIList.add(sentPI); }
J'arrive pas à expliquer donc pour faire plus simple
http://blog.srijna.com/2010/10/26/se...d-application/
Partager