SMS送信するAndroidアプリケーションを作る ~Delphiでお手軽プログラミング
SMS送信して送信結果を受信したい場合は、
「SMS送信して送信結果をBroadcastReceiverで受信するAndroidアプリケーション」
を参照してください。
1.フォームの作成
FMXフレームワークで以下のようにフォームにTButtonを1つ配置します。2.ソースコード
実際にSMS送信を行うのは、Button1Click関数の4行だけです。unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Platform, System.Permissions; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { private 宣言 } function AppEvent(AppEvent:TApplicationEvent; Context:TObject):Boolean; procedure RequestPermissions(); procedure PermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>); public { public 宣言 } end; var Form1: TForm1; implementation {$R *.fmx} uses //StringToJString JStringToString TAndroidHelper Androidapi.Helpers //TJManifest_permission ,Androidapi.JNI.Os //TJActivityCompat ,Androidapi.Jni.Support //TDialogService ,FMX.DialogService //JString ,Androidapi.JNI.JavaTypes //JSmsManager TJSmsManager ,Androidapi.JNI.Telephony ; function TForm1.AppEvent(AppEvent:TApplicationEvent; Context:TObject): Boolean; begin Result:=False; case AppEvent of TApplicationEvent.BecameActive: begin //アプリがフォーカス取得時 end; TApplicationEvent.WillBecomeInactive: begin //アプリがフォーカス喪失時 end; end; end; procedure TForm1.Button1Click(Sender: TObject); var smsTo: JString; smsManager: JSmsManager; smsMsg:JString; begin smsManager := TJSmsManager.JavaClass.getDefault; //SMS送信先電話番号を設定する smsTo := StringToJString('09000000000'); //SMS送信メッセージを設定する smsMsg:= StringToJString('ここに'+#13+#10+'メッセージ本文を入力'); smsManager.sendTextMessage(smsTo, nil, smsMsg, nil, nil); end; procedure TForm1.FormCreate(Sender: TObject); var APPEventService:IFMXApplicationEventService; begin if TPlatformServices.Current.SupportsPlatformService( IFMXApplicationEventService) then begin try APPEventService:=IFMXApplicationEventService( TPlatformServices.Current.GetPlatformService( IFMXApplicationEventService ) ); except APPEventService:=nil; end; end; if (APPEventService <> nil) then APPEventService.SetApplicationEventHandler(AppEvent); RequestPermissions(); end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if Key = vkHardwareBack then Key := 0; end; procedure TForm1.PermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>); begin //SMS送信権限があるか if (AGrantResults[0] <> TPermissionStatus.Granted) then begin //SMS送信権限がない場合 //「□今後は表示しない」チェックボックスにチェックが入っているか if (TJActivityCompat.JavaClass.shouldShowRequestPermissionRationale( TAndroidHelper.Activity,TJManifest_permission.JavaClass.SEND_SMS)) then begin //「□今後は表示しない」チェックボックスにチェックが入っていない場合 // 非同期でダイアログを表示して説明と許可を要求 TDialogService.MessageDialog( '許可しないとアプリが動作しません。', TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOK],TMsgDlgBtn.mbOk, 0, procedure (const AResult: TModalResult) begin //2回目以降は「□今後は表示しない」チェックボックスが表示される RequestPermissions(); end ); end else begin //「□今後は表示しない」チェックボックスにチェックが入っている TDialogService.MessageDialog( '権限が無いため終了します。「設定⇒アプリと通知」から権限を設定してください。', TMsgDlgType.mtError,[TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0, procedure(const AResult:TModalResult) begin Application.Terminate; end ); end; end; end; procedure TForm1.RequestPermissions; var FPmsSMS: string; begin FPmsSMS:=JStringToString( TJManifest_permission.JavaClass.SEND_SMS); PermissionsService.RequestPermissions( [FPmsSMS], PermissionRequestResult); end; end.