【问题标题】:Delphi Firemonkey select multiple pictures from gallery at the same timeDelphi Firemonkey 同时从图库中选择多张图片
【发布时间】:2017-08-02 20:25:44
【问题描述】:

我需要在我的 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 中选择的文件!

【问题讨论】:

  • 您没有问题,但您只是在解决您想做的事情,就像伪代码一样,您希望这里的人为您编写代码。 SO,不是代码编写服务。做你的研究,尝试一些事情和代码,如果你卡住了,那么你可以在这里提出关于特定代码问题的问题。有关如何提出 SO 问题的更多信息,请参阅How do I ask a good question?
  • @ChristosLytras 这里是一个用户问我的问题的例子,问代码!我花了很多时间研究,但我没有发现任何东西。我刚刚尝试过,总是允许询问;想回答就回答! . stackoverflow.com/questions/10516968/…
  • 阅读您要链接的问题的第二条评论。这两个问题(您的问题和那个链接)实际上都没有询问有关解决特定问题的任何问题,而是描述了想要的程序行为/功能。阅读How do I ask a good question?。这是通过搜索 "android open phone gallery"How to open phones gallery through code 得到的 google 结果。所以对我来说,你根本没有进行任何搜索,只是来这里寻找某人为你做这项工作并为他们提供赏金。
  • 请阅读开放赏金中的评论:“我需要一个用 Delphi 编写的工作代码示例” 不幸的是,我不知道如何从 Java 转换为 Pascal。无论如何,您发布的链接不是我需要的。我也可以打开画廊,但限制是我一次只能得到一张图片
  • 您的目标 Android 最低版本是多少?

标签: android delphi firemonkey


【解决方案1】:

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

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

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

pickerIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE);

如果您的目标是较旧的 Android 版本,您可以将自定义库 like this one(或 one of these)包含到您的项目中,并以新的意图定位该活动。

我的研究表明 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);

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

【讨论】:

  • 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 中选择的文件。
猜你喜欢
  • 1970-01-01
  • 2013-11-04
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
相关资源
最近更新 更多