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

标签 android delphi 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;

不幸的是,这段代码一次只能从画廊返回一张图片。

编辑 - 基于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);

上面的代码可以选择多张图片。现在我不得不寻找一个解决方案来(在回调函数中)取回 Delphi 中的选定文件!

最佳答案

我将从免责声明开始——我不编写 Delphi。您的问题是我第一次听说 Firemonkey,我希望大多数 Android 开发人员也是如此(因此回答率很低)。

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

如果您仅针对 Android 18 及更高版本,只需将 EXTRA_ALLOW_MULTIPLE extra 添加到现有的照片选择器 Intent 中即可。使用纯 Android 就像添加以下内容并读回剪辑数据一样简单(如 this answer 中):

pickerIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE);

如果您的目标是较旧的 Android 版本,您可以改为包含一个自定义库 like this one (或 one of these)进入您的项目并以新的 Intent 定位该 Activity 。

我的研究表明 Firemonkey 允许 custom actions ,你必须自己研究如何实现一个,因为你会更好地理解你阅读的代码。

但是this post (这似乎是必读)向我展示了创建您自己的 Intent 是可能的,这意味着您的初始操作中的代码将与此类似(如果您可以找到当前 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);

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

关于android - Delphi Firemonkey 同时从图库中选择多张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42753164/

相关文章:

android - 在 Android APK 中打包多个项目

c# - 1 :1 Alignment of C# Structs with Streamed Delphi Records Possible?

sqlite - 使用 Delphi/Firedac 从 Sqlite 读取日期

delphi - Delphi 中的 Jabber 有完整的库吗?

ios - Delphi XE2/FireMonkey 电子邮件创建

Delphi - 在 FireMonkey 中正确显示消息对话框并返回模态结果

macos - 从 Delphi for OSX64 中的 Macapi.IOKit 导入 IORegistryEntrySearchCFProperty

android - 如何将授权承载 header 添加到 webview android?

php - 从 Android 应用程序访问 MySQL 中的另一个数据库

android - 使位图的某些区域在触摸时透明 --> 再次