其他分享
首页 > 其他分享> > 如何在知道其Jnet_Uri的情况下将文件加载到Android流中?

如何在知道其Jnet_Uri的情况下将文件加载到Android流中?

作者:互联网

我正在Delphi 10.3 Rio中编写一个Android FMX应用程序.在这里,我从图库中选择照片(通过TJIntent.JavaClass.ACTION_OPEN_DOCUMENT),然后返回Jnet_Uri条目.我可以用它们来读取图像EXIF(使用TJExifInterface).现在,我还需要将这些图像加载到流中以进行进一步处理.我该怎么做呢?

当我尝试使用uri.getPath将Jnet_Uri转换为路径时,它像/ document / image:26591一样出现. uri.toString给了我content://com.android.providers.media.documents/document/image:26674. TMemoryStream.LoadFromFile无法从以下两个路径加载:

Cannot open file “/document/image:26724”. No such file or directory
Cannot open file “/content:/com.android.providers.media.documents/document/image%3A26724”. Not a directory

因此,问题出在,如何知道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

标签:delphi-10-3-rio,firemonkey,uri,android,delphi
来源: https://codeday.me/bug/20191024/1922987.html