Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

디바이스의 휴대폰 번호 추출을 알고싶습니다


김용규

질문

1 answer to this question

Recommended Posts

  • 0

아래 링크를 먼저 확인 하시구요..

위 링크에서 전화번호 얻어 오는 부분 추가 한 소스 입니다.

unit PMUnit;

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, FMX.DialogService,
  FMX.Platform, FMX.PhoneDialer;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    BT_Call: TButton;
    Button4: TButton;
    BT_PNumer: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BT_CallClick(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure BT_PNumerClick(Sender: TObject);
  private
    FPhoneDialerService: IFMXPhoneDialerService;

    procedure DisplayRationale(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
    procedure Loacation_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
    procedure Call_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
    procedure Camera_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
    procedure PNumber_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);


    { Private declarations }
  public
    { Public declarations }
    FPermissionLoacation, FPermissionCall, FPermissionCamera, FPermissionPNumber : string;
  end;

var
  Form1: TForm1;

implementation

uses
{$IFDEF ANDROID}
   Androidapi.JNI.Os,
   Androidapi.Helpers,
   AndroidApi.Jni.JavaTypes,

   Androidapi.JNI.Telephony,  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge;  // for 전화번호
{$ENDIF}



{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FPermissionLoacation := JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION );
  FPermissionCall      := JStringToString(TJManifest_permission.JavaClass.CALL_PHONE );
  FPermissionCamera    := JStringToString(TJManifest_permission.JavaClass.CAMERA );
  FPermissionPNumber   := JStringToString(TJManifest_permission.JavaClass.READ_PHONE_NUMBERS );

  TPlatformServices.Current.SupportsPlatformService( IFMXPhoneDialerService, FPhoneDialerService);  // 전화걸기 서비스
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  PermissionsService.RequestPermissions([FPermissionLoacation], Loacation_PermissionRequestResult, DisplayRationale);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  PermissionsService.RequestPermissions([FPermissionCall], Call_PermissionRequestResult, DisplayRationale);
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
  PermissionsService.RequestPermissions([FPermissionCamera], Camera_PermissionRequestResult, DisplayRationale);
end;


procedure TForm1.Button4Click(Sender: TObject);
begin
  PermissionsService.RequestPermissions([FPermissionPNumber], PNumber_PermissionRequestResult, DisplayRationale);
end;


procedure TForm1.DisplayRationale(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
var
  I: Integer;
  RationaleMsg: string;
begin
  for I := 0 to High(APermissions) do
  begin
    if APermissions[I] = FPermissionLoacation then
      RationaleMsg := RationaleMsg + 'The app needs to access the Permission Location' + SLineBreak + SLineBreak

    else if APermissions[I] = FPermissionCall then
      RationaleMsg := RationaleMsg + 'The app needs to access the Permission Call' + SLineBreak + SLineBreak

    else if APermissions[I] = FPermissionCamera then
      RationaleMsg := RationaleMsg + 'The app needs to access the Permission Camera' + SLineBreak + SLineBreak

    else if APermissions[I] = FPermissionPNumber then
      RationaleMsg := RationaleMsg + 'The app needs to access the Permission Phone Number' + 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(RationaleMsg,
    procedure(const AResult: TModalResult)
    begin
      APostRationaleProc;
    end)
end;


procedure TForm1.Loacation_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
  // 3 permissions involved: CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE
//  if (Length(AGrantResults) = 3) and
//     (AGrantResults[0] = TPermissionStatus.Granted) and
//     (AGrantResults[1] = TPermissionStatus.Granted) and
//     (AGrantResults[2] = TPermissionStatus.Granted) then

  if ( Length(AGrantResults) = 1) and
     (AGrantResults[0] = TPermissionStatus.Granted) then
     TDialogService.ShowMessage('Location permissions OK ' )
  else
    TDialogService.ShowMessage('The required permissions are not granted');
end;


procedure TForm1.Call_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
  if ( Length(AGrantResults) = 1) and  (AGrantResults[0] = TPermissionStatus.Granted) then
  begin
    TDialogService.ShowMessage('Call permissions OK ' );
    BT_Call.Enabled := TRUE;
  end
  else
    TDialogService.ShowMessage('The required permissions are not granted');
end;

procedure TForm1.Camera_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
  if ( Length(AGrantResults) = 1) and
     (AGrantResults[0] = TPermissionStatus.Granted) then
    TDialogService.ShowMessage('Camera permissions OK ' )
  else
    TDialogService.ShowMessage('The required permissions are not granted');
end;


procedure TForm1.PNumber_PermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
  if ( Length(AGrantResults) = 1) and
     (AGrantResults[0] = TPermissionStatus.Granted) then
    TDialogService.ShowMessage('Phone Number permissions OK ' )
  else
    TDialogService.ShowMessage('The required permissions are not granted');
end;


//**************************************************************
procedure TForm1.BT_CallClick(Sender: TObject);
begin
  FPhoneDialerService.Call( '114' );   // 전화걸기
end;

// 전화번호 
procedure TForm1.BT_PNumerClick(Sender: TObject);
var
  obj : JObject;
  PhoneManager : JTelephonyManager;
  PhoneNumber : string;
begin
  obj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
  PhoneManager := TJTelephonyManager.Wrap((obj as ILocalObject).GetObjectID);
  PhoneNumber := JStringToString(PhoneManager.getLine1Number);
  ShowMessage( PhoneNumber );
end;


end.

 

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.