我需要在我的 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/