Как отправить 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);
Ответ 3
См. также:
http://delphi-android.blogspot.dk/2013/10/how-to-send-sms-with-delphi-on-android.html
для функции копирования и вставки.
Мне нравится иметь такие функции в отдельном модуле, вместо того, чтобы помещать его в обработчик событий Button.
Ответ 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;