17

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

4 回答 4

13

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

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;
于 2013-09-17T12:39:24.360 回答
2

sendTextMessage的第二个参数不是“发送者”号码,而是标识 SMS 提供者服务中心

您几乎可以肯定不想在这里指定任何内容。只需传递nilSMSManager将使用设备默认服务中心来传递您的消息。

sRecipient := StringToJString(edRecipient.Text);
sMessage   := StringToJString(edMessage.Text);
sendTextMessage(sRecipient, nil, sMessage, nil, nil);
于 2014-08-26T03:17:18.300 回答
1

也可以看看:

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

用于复制和粘贴功能。

我喜欢将这些功能放在一个单独的单元中,而不是将其放入 Button 的事件处理程序中。

于 2013-10-28T05:30:28.970 回答
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;
于 2014-02-05T18:25:46.127 回答