Comment envoyer un SMS avec Delphi XE5 dans Android

<!-Est-ce que quelqu'un sait comment faire pour que ça marche? Je n'ai eu que le code ci-dessous, mais sans succès. Au début, il vous donne un peu d'espoir quand il dit que vous avez besoin de la SEND_SMS permission. Mais après avoir obtenu cette permission, rien ne se passe!

uses
 Androidapi.JNI.JavaTypes;

procedure TForm1.Button1Click(Sender: TObject);
var
  smsManager: JSmsManager;
  smsTo, smsFrom: JString;
begin
  smsManager:= TJSmsManager.JavaClass.getDefault;
  smsTo:= StringToJString('552199999999'); //replace with the right destination number
  smsFrom:= StringToJString('552499999999'); //replace with the right originator number
  smsManager.sendTextMessage(smsTo, smsFrom, StringToJString(Edit1.Text), nil, nil);
end;
16
demandé sur fvrghl 2013-09-17 06:51:30

4 réponses

essayez de passer la valeur vide (nil) <à la!--2--> paramètre sendTextMessage appel de la fonction pour utiliser la valeur par défaut de SMS center:

uses
  Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony;

procedure TForm1.Button1Click(Sender: TObject);
var
  smsTo: JString;
  smsManager: JSmsManager;
begin
  smsManager := TJSmsManager.JavaClass.getDefault;
  smsTo := StringToJString('091...');
  smsManager.sendTextMessage(smsTo, nil, StringToJString('Test SMS'), nil, nil);
end;
12
répondu mh taqia 2013-09-17 22:09:01

Le deuxième paramètre sendTextMessage n'est pas le numéro" expéditeur", il identifie plutôt le fournisseur de SMS centre de service.

Vous n'avez certainement pas voulu préciser quoi que ce soit ici. Simplement passer nul et SMSManager utilisera le device default service center pour transmettre votre message.

sRecipient := StringToJString(edRecipient.Text);
sMessage   := StringToJString(edMessage.Text);
sendTextMessage(sRecipient, nil, sMessage, nil, nil);
2
répondu Deltics 2014-08-26 03:17:18

Voir aussi:

http://delphi-android.blogspot.dk/2013/10/how-to-send-sms-with-delphi-on-android.html

pour une fonction copier & coller.

j'aime avoir de telles fonctions dans une unité séparée, au lieu de les mettre dans le gestionnaire d'événements du bouton.

1
répondu Lars D 2013-10-28 05:30:28

Vous pouvez aussi le faire avec l'objet JIntend comme ci-dessous

procedure CreateSms(const Number, Msg: string);
var
  Intent: JIntent;
  Uri: Jnet_Uri;
begin
  Uri := TJnet_Uri.JavaClass.parse(StringToJString(Format('smsto:%s', [Number])));
  Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);
  Intent.putExtra(StringToJString('sms_body'), StringToJString(Msg));
  SharedActivity.startActivity(Intent);
end;
1
répondu Xawery Wiśniowiecki 2014-02-05 18:25:46