如何在Android上知道Jnet_Uri的情况下将文件加载到流中?
我正在用Delphi10.3Rio编写一个Android FMX应用程序。在那里,我从图库中选择照片(通过如何在Android上知道Jnet_Uri的情况下将文件加载到流中?,android,delphi,uri,firemonkey,delphi-10.3-rio,Android,Delphi,Uri,Firemonkey,Delphi 10.3 Rio,我正在用Delphi10.3Rio编写一个Android FMX应用程序。在那里,我从图库中选择照片(通过TJIntent.JavaClass.ACTION\u OPEN\u DOCUMENT)并返回Jnet\u Uri条目。我可以使用这些来读取图像EXIF(使用TJExifInterface)。现在,我还需要将这些图像加载到流中以进行进一步处理。我该怎么做 当我尝试将Jnet_Uri转换为带有Uri.getPath的路径时,结果就像/document/image:26591uri.toStri
TJIntent.JavaClass.ACTION\u OPEN\u DOCUMENT
)并返回Jnet\u Uri
条目。我可以使用这些来读取图像EXIF(使用TJExifInterface)。现在,我还需要将这些图像加载到流中以进行进一步处理。我该怎么做
当我尝试将Jnet_Uri转换为带有Uri.getPath
的路径时,结果就像/document/image:26591
uri.toString
给了我content://com.android.providers.media.documents/document/image%3A26674
TMemoryStream.LoadFromFile
无法从以下两个路径加载:
无法打开文件“/文档/图像:26724”。没有这样的文件或目录无法打开文件“/content:/com.android.providers.media.documents/document/image%3A26724”。不是目录
因此,问题是,我如何知道Jnet_Uri才能将文件内容加载到流中?我能够通过JInputStream读取数据:
var
uri: Jnet_Uri;
ms: TMemoryStream;
jis: JInputStream;
b: TJavaArray<Byte>;
begin
uri := .. some uri, alike "/document/image:26591"
ms := TMemoryStream.Create;
// Need to read via JInputStream, since Uri is not a file
jis := TAndroidHelper.Context.getContentResolver.openInputStream(uri);
b := TJavaArray<Byte>.Create(jis.available);
jis.read(b);
ms.Write(b.Data^, b.Length);
jis.close;
.. do something with Stream now
var
uri:Jnet_-uri;
ms:TMemoryStream;
jis:JInputStream;
b:TJavaArray;
开始
uri:=。。一些uri,类似“/文档/图像:26591”
ms:=TMemoryStream.Create;
//需要通过JInputStream读取,因为Uri不是文件
jis:=TAndroidHelper.Context.getContentResolver.openInputStream(uri);
b:=TJavaArray.Create(jis.available);
jis.read(b);
ms.Write(b.Data^,b.Length);
jis.close;
.. 现在就用Stream做点什么吧
Rus中的同一个问题:您能发布完整的代码吗?我和你有同样的问题,thanks@dedoms
是一种典型的流,可以用普通的Delphi方式使用。什么给你带来了问题?这是我的帖子: