Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上知道Jnet_Uri的情况下将文件加载到流中?_Android_Delphi_Uri_Firemonkey_Delphi 10.3 Rio - Fatal编程技术网

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

如何在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

我正在用Delphi10.3Rio编写一个Android FMX应用程序。在那里,我从图库中选择照片(通过
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@dedo
ms
是一种典型的流,可以用普通的Delphi方式使用。什么给你带来了问题?这是我的帖子: