Перейти к содержанию
Fire Monkey от А до Я
  • 0

Отправка E-mail с прикрепленным изображением.


Humanoid

Вопрос

При отправке почты понадобилось сохранить изображение и добавить его в аттач сообщения.
Проблема свелась к правильному получению URI файла изображения.
Самостоятельно не смог побороть. Обратился за помощью к krapotkin.
Спасибо ему огромное за помощь.
Ну и может быть кому то будет полезен сей опыт.
Реализовано под D10.4 Sydney
Вот решение.
В параметрах проекта включаем "Secure File Sharing",  при этом система автоматом создаст необходимые файлы для FilePropvider.
Ну и собственно получение URI файла через TAndroidHelper.JFileToJURI
 

procedure TfmDecoder.TestSendEmail();
{$IF DEFINED(ANDROID)}
 var
  lIntent: JIntent;
  lJRecipient: TJavaObjectArray<JString>;
  lURI: Jnet_Uri;
  lFileName: string;
  lFilePath: string;
  lFilePathFileName: string;

  Delim :Char;
//  Surf : TBitmapSurface;
{$ENDIF}


begin
 lFileName := Concat('MyFile' ,'.jpg') ;
 lFilePath := System.IOUtils.TPath.GetPublicPath ;
 lFilePathFileName := System.IOUtils.Tpath.Combine(lFilePath, lFileName) ;
 Surf:=TBitMapSurface.Create;
 SaveParams.Quality:=100;
 try
   Surf.Assign(imResult.Bitmap);
 // Save file
   TbitMapCodecManager.SaveToFile(lFilePathFileName, Surf, @SaveParams);
 finally
   Surf.Free;
 end;
{$IF DEFINED(ANDROID)}
  lJRecipient:= TJavaObjectArray<JString>.Create(1);
  lJRecipient.Items[0]:= StringToJString('xxxxxxx@yyyy.com');

  lIntent:= TJIntent.Create;

  lIntent.setType(StringToJString('message/rfc822'));
  lIntent.setAction(TJIntent.JavaClass.ACTION_SEND);
  lIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  lIntent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, lJRecipient);
  lIntent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString('Subj'));
  lIntent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString('Text'));

  lUri:= TAndroidHelper.JFileToJURI(
      TJFile.JavaClass.init(StringToJString(lFilePathFileName)));

  lIntent.putExtra(TJIntent.JavaClass.EXTRA_STREAM,TJParcelable.Wrap(lUri)) ;

  try
    TAndroidHelper.Activity.startActivity(lIntent);
  except
    on E: Exception do
    begin
      ShowMessage( E.Message);
    end;
  end;
{$ENDIF}
end;

 

Изменено пользователем Humanoid
Ссылка на комментарий

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...