如何在Delphi中开发安卓APP使用Intent / Activity Java类和Android权限发送SMS消息

提示:不要忘记在Delphi工程Option选项中开启SEND SMS颈椎枕权限!欢迎加入Delphi开发局QQ群:32422310

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.

  

猜你喜欢

转载自www.cnblogs.com/taishanlaofu/p/12893069.html