자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi Delphi 10.3 rio 에서 10.2에서 잘되었던 내 전화번호 가져오기가 안됩니다.
2019.09.05 10:11
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
function DoGetPhoneNumber: string;
var
sTemp: string;
nPos: integer;
{$IFDEF Android}
tMgr: JTelephonyManager;
{$ENDIF}
begin
integer(Result) := 0;
{$IFDEF Android}
tMgr := TJTelephonyManager.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE)
as ILocalObject).GetObjectID);
sTemp := JStringToString(tMgr.getLine1Number);
nPos := Pos('10', sTemp);
if nPos > 0 then
Result := '0' + Copy(sTemp, nPos, MaxInt)
else
Result := sTemp;
{$ENDIF}
end;
해당함수로 호출해서 쓰던 전화번호 가져오기가
10.3에서는 먹통이 됩니다.
도와주세요.
댓글 2
-
c2design
2019.09.05 14:37
-
c2design
2019.09.05 14:41
작성하신 함수를 아래와 같이 호출하면 되겠네요..
uses
Androidapi.Jni.Os,
System.Permissions;
procedure TForm2.Button1Click(Sender: TObject);
begin
PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_PHONE_STATE )],
procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
begin
if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
begin
Button1.Text := DoGetPhoneNumber;
end
else
ShowMessage('기능 사용을 위한 권한 동의가 필요합니다.');
end);
end;
Delphi Delphi 10.3 rio 에서 10.2에서 잘되었던 내 전화번호 가져오기가 안됩니다.
2019.09.05 10:11
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
function DoGetPhoneNumber: string;
var
sTemp: string;
nPos: integer;
{$IFDEF Android}
tMgr: JTelephonyManager;
{$ENDIF}
begin
integer(Result) := 0;
{$IFDEF Android}
tMgr := TJTelephonyManager.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE)
as ILocalObject).GetObjectID);
sTemp := JStringToString(tMgr.getLine1Number);
nPos := Pos('10', sTemp);
if nPos > 0 then
Result := '0' + Copy(sTemp, nPos, MaxInt)
else
Result := sTemp;
{$ENDIF}
end;
해당함수로 호출해서 쓰던 전화번호 가져오기가
10.3에서는 먹통이 됩니다.
도와주세요.
댓글 2
-
c2design
2019.09.05 14:37
-
c2design
2019.09.05 14:41
작성하신 함수를 아래와 같이 호출하면 되겠네요..
uses
Androidapi.Jni.Os,
System.Permissions;procedure TForm2.Button1Click(Sender: TObject);
beginPermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_PHONE_STATE )],
procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
begin
if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
begin
Button1.Text := DoGetPhoneNumber;
endelse
ShowMessage('기능 사용을 위한 권한 동의가 필요합니다.');end);
end;
안드로이드 퍼미션 문제 입니다.
최신 안드로이드 API 에서는 런타임 퍼미션으로 지정하여야 하며 10.3 에서는 이방식을 따릅니다.
아래 링크의 자료를 참조 하세요.
https://blog.hjf.pe.kr/493
https://cafe.naver.com/delphifmx/2090
http://blong.com/Articles/AndroidPermissions/DelphiAppPermissions.htm