Обработка результата намерения нескольких выбранных файлов из хранилища - PullRequest
1 голос
/ 12 июля 2020

У меня эта головная боль android Намерения. Я пытаюсь выбрать несколько изображений из хранилища. Я заставил его работать до точки, чтобы обработать результаты. я предполагаю, что какой-то For l oop получить путь ко всем файлам ?. Результат в моем коде возвращается пустым, я не знаю, в чем проблема. мой код до сих пор:

//Button to launch activity : 
 var
    Intent: JIntent;
  begin

  FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage
      (TMessageResultNotification, HandleActivityMessage);

      Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_PICK);
      Intent.setType(StringToJString('image/*'));
      Intent.setAction(TjIntent.JavaClass.ACTION_GET_CONTENT);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_ALLOW_MULTIPLE, true);
      SharedActivity.startActivityForResult(Intent, 0);
  end;


//Handling Result : 
 procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);
function OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;

...
procedure TForm3.HandleActivityMessage(const Sender: TObject;
    const M: TMessage);
begin
  if M is TMessageResultNotification then
  OnActivityResult(TMessageResultNotification(M).RequestCode, 
  TMessageResultNotification(M).ResultCode,
  TMessageResultNotification(M).Value);
end;




function TForm3.OnActivityResult(RequestCode, ResultCode: Integer;
      Data: JIntent): Boolean;
    var
      filename : string;  list : Tstrings;
    begin
      Result := False;

      TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, FMessageSubscriptionID);
      FMessageSubscriptionID := 0;

     
      if RequestCode = ScanRequestCode then
      begin
        if ResultCode = TJActivity.JavaClass.RESULT_OK then
        begin
          if Assigned(Data) then
          begin
            //filename := JStringToString(Data.getStringExtra(StringToJString('RESULT')));
             filename := JStringToString(Data.getStringExtra(TJIntent.JavaClass.EXTRA_TEXT));
             ShowMessage('Result : '+filename);
             memo1.Lines.Add(filename);
           end;


            //Toast(Format('Found %s format barcode:'#10'%s', [ScanFormat, ScanContent]), LongToast);
          end;
        end
        else if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then
        begin
          ShowMessage('No');
        end;
        Result := True;
      end;

использовал IDE: Delphi 10.3.3 и Android 9

1 Ответ

1 голос
/ 12 июля 2020

Я нашел решение. Вот вам go:

// loop through all images
JStringToString(Data.getClipData.getItemAt(i).getUri.toString
...