Delphi Firemonkey同时从库中选择多张图片

Gia*_*mbo 10 delphi android firemonkey

我需要在我的Android应用程序中创建一个功能,允许用户打开手机图库,一次选择多张图片,然后将选定的图片保存在我的本地数据库中.我需要的是使用Android Intent获取所选图片(文件名和路径)的方法.希望你能理解我的问题.

我正在使用此代码:

if TPlatformServices.Current.SupportsPlatformService(IFMXTakenImageService,
  IInterface(ImageService)) then
begin
  Params.RequiredResolution := TSize.Create(640, 640);
  Params.OnDidFinishTaking := DoDidFinish;
  ImageService.TakeImageFromLibrary(SpeedButton2, Params);
end;

procedure TfGallery.DoDidFinish(Image: TBitmap);
begin
 Image1.Bitmap.Assign(Image);
end;
Run Code Online (Sandbox Code Playgroud)

不幸的是,此代码可以从图库中返回一次图像.

编辑 - 根据Nick Cardoso的答案,以下代码适用于问题的第一部分:

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);
LaunchActivity(Intent);
Run Code Online (Sandbox Code Playgroud)

上面的代码用于选择多张图片.现在我很难找到一个解决方案来回复(在回调函数中)Delphi中的选定文件!

Nic*_*oso 5

我将从免责声明开始- 我不写 Delphi。你的问题是我第一次听说 Firemonkey,我预计大多数 Android 开发者也是如此(因此回答率较低)。

我的理解是,Firemonkey 在幕后触发普通的 Android Intents 来与标准组件交互。这意味着如果我们可以将意图切换为返回多个图像的意图,我们就有了一个解决方案。

如果您仅针对 Android 18 及更高版本,只需将额外内容添加EXTRA_ALLOW_MULTIPLE到现有照片选择器 Intent 中即可。对于纯 Android,只需添加以下内容并读回剪辑数据(如本答案所示):

pickerIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE);
Run Code Online (Sandbox Code Playgroud)

如果您的目标是较旧的 Android 版本,您可以将像这样的自定义库(或其中之一)包含到您的项目中,并以新的意图来定位该活动。

我的研究表明 Firemonkey 允许自定义操作,您必须自己研究如何实现,因为您会更好地理解您阅读的代码。

然而这篇文章看起来像是必读)向我展示了可以创建您自己的意图,这意味着您的初始操作中的代码将与此类似(如果您可以找到当前 TakeImageFromLibrary 操作的源代码,您可以根据您的代码):

Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_PICK);
//OR Intent := TJIntent.JavaClass.init(StringToJString('com.some.library.client.SOME_ACTION'));
Intent.putExtra(TJIntent.JavaClass.EXTRA_ALLOW_MULTIPLE);
LaunchActivity(Intent);
Run Code Online (Sandbox Code Playgroud)

附加说明:在图库中选择多个的默认行为是长按