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