处理存储中多个选定文件的意图结果

Handling intent result of multiple selected files from the storage

我对 android 意图感到头疼。我正在尝试从存储中 select 多个图像。我让它工作到处理结果的程度。我的猜测是某种获取所有文件路径的 For 循环?我的代码中的结果 returns 为空,我不知道是什么问题。到目前为止我的代码:

//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;

结束; 结束;

使用 IDE : Delphi 10.3.3 和 Android 9

我找到了解决办法。给你:

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