Как отправить SMS с помощью Delphi XE5 в Android

Кто-нибудь знает, как заставить это работать? Ближе всего я получил код ниже, но не добился успеха. Во-первых, это дает вам некоторую надежду, когда он говорит вам, что вам нужно разрешение SEND_SMS. Но после установки этого разрешения ничего не происходит!

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;

Ответы

Ответ 1

Попробуйте передать пустое значение (nil) в параметр scAddress вызова функции sendTextMessage, чтобы использовать текущий центр SMS по умолчанию:

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;

Ответ 2

Второй параметр sendTextMessage не является номером "отправителя", скорее он идентифицирует сервисный центр поставщика SMS.

Вы почти наверняка не хотели указывать что-либо здесь. Просто передайте nil, а SMSManager будет использовать сервисный центр по умолчанию для устройства для доставки вашего сообщения.

sRecipient := StringToJString(edRecipient.Text);
sMessage   := StringToJString(edMessage.Text);
sendTextMessage(sRecipient, nil, sMessage, nil, nil);

Ответ 4

Вы также можете сделать это с помощью объекта JIntend, как показано ниже

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;