如何在Android中使用Delphi XE5发送短信

时间:2013-09-17 02:51:30

标签: android delphi sms firemonkey delphi-xe5

有人知道如何让它发挥作用吗? 我得到的最接近的是下面的代码,但没有成功。 首先,当它告诉您需要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;

4 个答案:

答案 0 :(得分:13)

尝试将空值(nil)传递给sendTextMessage函数调用的scAddress参数,以使用当前的默认短信中心:

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;

答案 1 :(得分:2)

sendTextMessage 的第二个参数不是"发件人"数字,而不是它标识SMS提供商服务中心

你几乎肯定不想在这里指明任何东西。只需传递 SMSManager 就会使用设备默认服务中心来传递您的信息。

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

答案 2 :(得分:1)

另见:

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

副本&粘贴功能。

我喜欢在单独的单元中使用这些函数,而不是将它放入Button的事件处理程序中。

答案 3 :(得分:1)

您也可以使用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;