[my sample] How to send SMS message using Intent / Activity Java Class and Android Permissions in Delphi
Me, May/2020
Me, May/2020
[SHOWTOGROUPS=4,20]
Как увидеть ссылки? | How to see hidden links?
Image: Googleplay
NOTE: DONT FORGET mark the SEND SMS permission in your project options!
[/SHOWTOGROUPS]
Как увидеть ссылки? | How to see hidden links?
Image: Googleplay
NOTE: DONT FORGET mark the SEND SMS permission in your project options!
Код:
unit uFormMain;
interface
uses
System.SysUtils,
System.Types,
System.UITypes,
System.Classes,
System.Variants,
System.Permissions,
FMX.Types,
FMX.Controls,
FMX.Forms,
FMX.Graphics,
FMX.Dialogs,
FMX.Controls.Presentation,
FMX.StdCtrls;
type
TfrmFormMain = class(TForm)
btnSendSMS: TButton;
procedure btnSendSMSClick(Sender: TObject);
private
{$IFDEF ANDROID}
procedure myPRREsulted(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
procedure myDRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
{$ENDIF}
public
{ Public declarations }
end;
var
frmFormMain: TfrmFormMain;
implementation
{$R *.fmx}
uses
FMX.DialogService,
System.IOUtils,
{$IF DEFINED(ANDROID)}
Androidapi.JNI.JavaTypes,
Androidapi.Helpers,
Androidapi.JNI.Net,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.Support,
Androidapi.JNI.Os,
Androidapi.JNI.App
{$ENDIF}
;
var
FPermissionSEND_SMS: string;
{$IFDEF ANDROID}
procedure CreateSms(const Number, Msg: string);
var
lMyIntent: JIntent;
lMyUri : Jnet_Uri;
begin
try
lMyUri := TJnet_Uri.JavaClass.parse(StringToJString(Format('smsto:%s', [Number])));
//
lMyIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, lMyUri);
//
lMyIntent.putExtra(StringToJString('sms_body'), StringToJString(Msg));
//
TAndroidHelper.Activity.startActivity(lMyIntent);
// SharedActivity.startActivity(lMyIntent); // deprecated in RAO 10.3.3
//
// TDialogService.ShowMessage('For tests: Confirm the message and press key to send it!');
except
on E: Exception do
TDialogService.ShowMessage('My error:' + sLineBreak + E.Message);
end;
end;
procedure TfrmFormMain.btnSendSMSClick(Sender: TObject);
begin
{$IFDEF ANDROID}
// Asking permission to access "YOUR NECESSITY" in your Android...
// FPermissionWifiState: string; defined in "uMyFunctionsAndroid" unit!
//
PermissionsService.RequestPermissions( { }
[FPermissionSEND_SMS], { <--- ... I need this permission }
myPRREsulted, { PermissionsRequestResult{ <-- callback function to each permission }
myDRationale { DisplayRationale }{ <-- to show the message for each permission - Always Non-Modal!!! }
);
{$ELSE}
ShowMessage('Hello word');
{$ENDIF}
end;
procedure TfrmFormMain.myDRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
var
i : Integer;
lRationaleMsg: string;
begin
for I := 0 to high(APermissions) do
begin
if APermissions[I] = FPermissionSEND_SMS then
lRationaleMsg := lRationaleMsg + 'The app needs to access your "<<SEND_SMS>>"' + SLineBreak + SLineBreak;
end;
//
// Show an explanation to the user *asynchronously* - don't block this thread waiting for the user's response!
// After the user sees the explanation, invoke the post-rationale routine to request the permissions
//
TDialogService.ShowMessage(lRationaleMsg,
procedure(const AResult: TModalResult)
begin
// TProc is defined in System.SysUtils
//
APostRationaleProc; // used by System to go-back in before function...
end)
end;
procedure TfrmFormMain.myPRREsulted(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
begin
// verifying permissions
if (Length(AGrantResults) = 1) and { }
(AGrantResults[0] = TPermissionStatus.Granted) { }
then
CreateSms('<<PHONE_NUMBER_TARGET_HERE', 'SMS_MESSAGE_HERE') { execute your procedure here if all it's ok }
else
TDialogService.ShowMessage('Permissions <<NECESSARY>> and not allowed by user');
end;
{$ENDIF}
initialization
{$IFDEF ANDROID}
//
FPermissionSEND_SMS := JStringToString(TJManifest_permission.JavaClass.SEND_SMS);
{$ENDIF}
finalization
end.