附近连接API:无法访问Android 10上接收的文件

附近连接API:无法访问Android 10上接收的文件,android,google-nearby,google-nearby-connections,Android,Google Nearby,Google Nearby Connections,我的目标是传输一个图像文件,该文件在接收方应该通过RESTAPI上传 Android 10阻止访问公共文件夹,如“下载”文件夹,从附近连接API接收的所有文件都存储在“附近”文件夹中 File payloadFile=filePayload.asFile().asJavaFile() 我有一个Payload对象,正如指南所建议的,上面的代码应该得到文件。不幸的是,当以api 29为目标并在Android 10设备上运行时,上述代码返回null。在早期的Android版本上运行良好 我可以通过执行

我的目标是传输一个图像文件,该文件在接收方应该通过RESTAPI上传

Android 10阻止访问公共文件夹,如“下载”文件夹,从附近连接API接收的所有文件都存储在“附近”文件夹中

File payloadFile=filePayload.asFile().asJavaFile()

我有一个
Payload
对象,正如指南所建议的,上面的代码应该得到文件。不幸的是,当以api 29为目标并在Android 10设备上运行时,上述代码返回null。在早期的Android版本上运行良好

我可以通过执行
File payloadFile=filepayloadfile.asFile().aspacelfiledescriptor()来获取ParcelFileDescriptor但不确定如何访问该文件

通过
ParcelFileDescriptor
我尝试通过以下方式读取文件,但我总是获得某种权限或错误访问异常:

BitmapFactory.decodeStream(FileInputStream(payloadFileDescriptor.fileDescriptor))
BitmapFactory.decodeFileDescriptor(payloadFileDescriptor.fileDescriptor)

该文件正确存储在下载文件夹中,我可以通过文件浏览器应用程序查看并打开它

还尝试通过内容解析程序(
MediaStore.Downloads.EXTERNAL\u content\u URI
MediaStore.Images.EXTERNAL\u content\u URI
)访问,但没有成功

这里需要注意的是,文件保存时没有扩展名,所以这可能就是Mediastore找不到任何东西的原因

我使用的是“com.google.android.gms:playservicesinnearner:17.0.0”


如前所述,我真的想收到一个文件并上传它。安卓10上的Near Connections API是否完全不可能实现这一点?

Near Connections 18.0.0已经发布。你现在可以这样做了-

if (VERSION.SDK_INT >= VERSION_CODES.Q) {
        // Because of https://developer.android.com/preview/privacy/scoped-storage, we are not
        // allowed to access filepaths from another process directly. Instead, we must open the
        // uri using our ContentResolver.
        Uri uri = filePayload.asFile().asUri();
        try {
          // Copy the file to a new location.
          InputStream in = context.getContentResolver().openInputStream(uri);
          copyStream(in, new FileOutputStream(new File(context.getCacheDir(), filename)));
        } catch (IOException e) {
          // Log the error.
        } finally {
          // Delete the original file.
          context.getContentResolver().delete(uri, null, null);
}

您如何知道该文件在下载文件夹中?
我遵循此指南。
??做什么?请告诉我你想要什么。
我可以得到ParcelFileDescriptor
我们会显示你的代码。我们怎么知道你在做什么?
我的目标是最终得到一个可读的文件对象。
这在Android Q下是不可能的。但是可以为文件获得一个好的内容方案uri。查询MediaStore应该会得到一个。Quote:
//获取接收到的文件(将在下载文件夹中)file payloadFile=filepayloadfile.asFile().asJavaFile()事实上,这就是文档所说的。但还是。。。认为在安卓Q下,这是行不通的。。