-1

是否可以使用 Delphi Xe8 在 iOS 中发送自动短信?我在 Android 中找到了这样做的示例,但在 iOS 中没有。我需要导入标头以在 Delphi 中使用还是已经内置了这样做的功能?

4

2 回答 2

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 的应用程序的博客文章中

于 2015-05-22T23:31:26.083 回答
1

对于 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}
于 2016-03-23T15:59:54.887 回答