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

Сделать фото через интент ACTION_Image_Capture


AlexShaman

Вопрос

procedure TfMain.PhotoClick(Sender: TObject);
var sPath,FLastPhotoName:string;
  {$IF DEFINED(ANDROID)}
  PhotoIntent: JIntent;
  photoUri: Jnet_Uri;
  JFileName: JFile;
  {$ENDIF}
begin
  {$IF DEFINED(ANDROID)}
  FLastPhotoName := '';
  FLastPhotoFullName := '';

  FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);
  PhotoIntent := TJIntent.JavaClass.init(TJMediaStore.JavaClass.ACTION_IMAGE_CAPTURE);
  if (PhotoIntent.resolveActivity(TAndroidHelper.Context.getPackageManager()) <> nil) then
  begin
    FLastPhotoName := THashMD5.GetHashString('JPEG PHOTO FILE ' + DateTimeToStr(Now)) + '.jpg';
    FLastPhotoFullName := TPath.Combine(TPath.GetSharedDocumentsPath, FLastPhotoName);
    JFileName := TJFile.JavaClass.init(StringToJString(FLastPhotoFullName));
    photoUri := TJnet_Uri.JavaClass.fromFile(JFileName);
    PhotoIntent.putExtra(TJMediaStore.JavaClass.EXTRA_OUTPUT,
        TJParcelable.Wrap((photoUri as ILocalObject).GetObjectID));

    if PhotoIntent.resolveActivity(TAndroidHelper.Activity.getPackageManager) <> nil then
      TAndroidHelper.Activity.startActivityForResult(PhotoIntent, REQUEST_IMAGE_CAPTURE);

  end;
  {$ENDIF}

 

Приложение камеры открывается, фото делается, но при закрытии приложение вылетает

В логах ошибки

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.embarcadero.test/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.NullPointerException

 

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

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

  • 0

Теперь не могу сохранить фото, т.е. оно вроде бы сохраняется, файл в папке появляется, но при открытии через стандарный(и не стандартный) Viewer ничего не открывается... "элемент не найден"..

Если из программы попытаться открыть-вылетает

 

procedure TfMain.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
var sPath:string;
  Image2: TBitmap;
  SaveParams: TBitmapCodecSaveParams;
begin
    Image2 := TBitmap.Create;
    sPath := TPath.Combine(TPath.GetSharedCameraPath, '1.jpg');
    TThread.Synchronize(nil,
    procedure
    begin
        Image2.Assign(Image);
        SaveParams.Quality := 100;
        Image2.SaveToFile(sPath, @SaveParams);
        Image2.Free;
    end
    );
    //AddPhoto(1,sPath, lDialogsActive);
    //AddImage(1,sPath, lDialogsActive);
end; 

 

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

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

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

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

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

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

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

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

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

×
×
  • Создать...