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.
3.権限設定画面
SMSメッセージの送信 にチェックを入れてtrueにします。
