是否可以使用 Delphi Xe8 在 iOS 中发送自动短信?我在 Android 中找到了这样做的示例,但在 iOS 中没有。我需要导入标头以在 Delphi 中使用还是已经内置了这样做的功能?
2 回答
不可以。两个平台上的 SMS 系统的工作方式不同。
在 Android 上,可以完全自动地以编程方式发送 SMS。
在 iOS(和 WinPhone)上,您只能预先编写SMS 消息,然后将其交给系统组件(由系统)呈现给用户,以确认他们是否希望发送消息。
用于此的iOS代码是:
var sms := new MFMessageComposeViewController;
sms.messageComposeDelegate := self;
sms.recipients := ['7275']; // mobile #('s)
sms.body := 'The message to send';
presentViewController(sms) animated(true) completion(nil);
注意:此代码是 ObjectPascal,但它是RemObjects Oxygene ,它直接针对 Cocoa 框架编译并生成本机 iOS 代码,因此无需导入标头等。要将其转换为 FireMonkey,您需要在中找到相应的声明/标头Delphi,假设它们已提供。
在转换为 Delphi 时,与此代码的Objective-C版本进行比较可能会有所帮助,因为 Delphi 没有为 Cocoa 框架调用中涉及的语法提供任何扩展支持。例如,在 Objective-C 中设置收件人属性:
sms.recipients = [NSArray arrayWithObjects:@"7275", nil];
关于差异以及上述 Oxygene 代码如何对应于 Objective-C 的进一步讨论,以帮助转换为 Delphi,在我写的一篇关于为 iOS、Android(和 WinPhone)开发基于 SMS 的应用程序的博客文章中。
对于 ios 使用 dpf ios 本机控件:)
这是我测试过的函数( dest 号在对象本身中......)
procedure SEND_SMS(NUMBER, TEXT: string);
{$IFDEF ANDROID}
var SmsManager: JSmsManager;
smsTo, txt: JString;
begin
SmsManager := TJSmsManager.JavaClass.getDefault;
smsTo := StringToJString(NUMBER);
txt := StringToJString(TEXT) ;
SmsManager.sendTextMessage( smsTo, nil, txt, nil, nil);
end;
{$ENDIF}
{$IFDEF iOS}
var sms: TDPFMessageCompose;
begin
sms := TDPFMessageCompose.Create(application);
SMS.MessageCompose( TEXT, [NUMBER] ) ;
sms.free;
end ;
{$ENDIF}
{$IF Defined(MSWINDOWS) }
begin
showmessage( 'sms ');
end;
{$ENDIF}