자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 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}
그러나 실행해보면 ''첨부화일에 대한 권한이 거부되었습니다."라고 화일이 첨부되지 않는데
해결방법이 있을까요?
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}
그러나 실행해보면 ''첨부화일에 대한 권한이 거부되었습니다."라고 화일이 첨부되지 않는데
해결방법이 있을까요?
인터넷에서 검색을 해보면 권한의 문제인 것은 분명합니다만
해결방안으로 제시한 것은 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
이상입니다.