자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey 이메일 첨부화일 접근에러에 대해 권한문제?
2020.06.13 13:11
안녕하세요.
안드로이드에서 생성된 파일을 메일 등으로 보내는 루틴은
wwEmailWithAttachment.pas를 통해 구현을 했습니다.
그러나 안드로이드 7.1에서는 되었는데
그 이후 버젼에서는 아래 사진과 같이 에러가 발생합니다.
권한문제인것 같습니다만 해결할 방법은 있을까요?
----------- 추신 ---------------
wwEmailWithAttachment.pas 내 안드로이드 부분을 인텐트를 사용하여
다음과 같이 수정했습니다.
{$region 'android'}
{$ifdef android}
procedure wwEmail(Recipients: Array of String; ccRecipients: Array of String;
bccRecipients: Array of String; subject, Content, AttachmentPath: string;
mimeTypeStr: string = '');
var
Intent: JIntent;
Uri: Jnet_Uri;
AttachmentFile: JFile;
i: integer;
emailAddresses: TJavaObjectArray<JString>;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SENDTO);
Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('mailto:')));
emailAddresses := TJavaObjectArray<JString>.Create(length(Recipients));
for i := Low(Recipients) to High(Recipients) do
emailAddresses.Items[i] := StringToJString(Recipients[i]);
AttachmentFile := TJFile.JavaClass.init(StringToJString(AttachmentPath));
Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, emailAddresses);
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(subject));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(Content));
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
SharedActivity.startActivity(Intent);
end;
{$endif}
{$endregion}
그러나 실행해보면 ''첨부화일에 대한 권한이 거부되었습니다."라고 화일이 첨부되지 않는데
해결방법이 있을까요?
번호 제목 글쓴이 날짜 조회 수
공지
[프로그래밍 강의] 2021.6~2021.12
관리자 2015.01.22 19434
공지
유용한 관련 사이트
관리자2 2014.03.20 58347
공지
본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다.
관리자 2012.01.10 101853
3
안드로이드 5에서 델파이로 만든 앱이 실행되지 않습니다.
[1] 첨처럼 2015.06.17 703
2
XE10 Rest컴포넌트를 이용한 멀티디바이스 앱에서 TFDMemTable관련 에러
[2] 김태윤 2016.03.21 443
»
이메일 첨부화일 접근에러에 대해 권한문제?
[1] 스카이 2020.06.13 344
Firemonkey 이메일 첨부화일 접근에러에 대해 권한문제?
2020.06.13 13:11
안녕하세요.
안드로이드에서 생성된 파일을 메일 등으로 보내는 루틴은
wwEmailWithAttachment.pas를 통해 구현을 했습니다.
그러나 안드로이드 7.1에서는 되었는데
그 이후 버젼에서는 아래 사진과 같이 에러가 발생합니다.
권한문제인것 같습니다만 해결할 방법은 있을까요?
----------- 추신 ---------------
wwEmailWithAttachment.pas 내 안드로이드 부분을 인텐트를 사용하여
다음과 같이 수정했습니다.
{$region 'android'}
{$ifdef android}
procedure wwEmail(Recipients: Array of String; ccRecipients: Array of String;
bccRecipients: Array of String; subject, Content, AttachmentPath: string;
mimeTypeStr: string = '');
var
Intent: JIntent;
Uri: Jnet_Uri;
AttachmentFile: JFile;
i: integer;
emailAddresses: TJavaObjectArray<JString>;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SENDTO);
Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('mailto:')));
emailAddresses := TJavaObjectArray<JString>.Create(length(Recipients));
for i := Low(Recipients) to High(Recipients) do
emailAddresses.Items[i] := StringToJString(Recipients[i]);
AttachmentFile := TJFile.JavaClass.init(StringToJString(AttachmentPath));
Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, emailAddresses);
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(subject));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(Content));
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
SharedActivity.startActivity(Intent);
end;
{$endif}
{$endregion}
그러나 실행해보면 ''첨부화일에 대한 권한이 거부되었습니다."라고 화일이 첨부되지 않는데
해결방법이 있을까요?
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [프로그래밍 강의] 2021.6~2021.12 | 관리자 | 2015.01.22 | 19434 |
공지 | 유용한 관련 사이트 | 관리자2 | 2014.03.20 | 58347 |
공지 | 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. | 관리자 | 2012.01.10 | 101853 |
3 | 안드로이드 5에서 델파이로 만든 앱이 실행되지 않습니다. [1] | 첨처럼 | 2015.06.17 | 703 |
2 | XE10 Rest컴포넌트를 이용한 멀티디바이스 앱에서 TFDMemTable관련 에러 [2] | 김태윤 | 2016.03.21 | 443 |
» | 이메일 첨부화일 접근에러에 대해 권한문제? [1] | 스카이 | 2020.06.13 | 344 |
인터넷에서 검색을 해보면 권한의 문제인 것은 분명합니다만
해결방안으로 제시한 것은 Uri.fromFILE( )이
GMAIL에는 READ_EXTERNAL_STORAGE이 없어 공유를 거부당하는 것이라 합니다.
그래서 FileProvider API를 사용하라고 합니다만 JAVA와 안드로이드를 공부하지 못해서
이해가 되지 않는군요...
FileProvider 관련된 FireMonkey의 Warpping은 없을까요?
안드로이드 사이트 참고하세요...
https://medium.com/@ali.muzaffar/what-is-android-os-fileuriexposedexception-and-what-you-can-do-about-it-70b9eb17c6d0
이상입니다.