Delphi中开发安卓APP使用Intent / Activity Java类和Android权限发送SMS消息  
官方Delphi 学习QQ群: 682628230(三千人)
频道

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.


来源:https://www.cnblogs.com/taishanlaofu/p/12893069.html


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.048792123794556 seconds