附近连接API:无法访问Android 10上接收的文件
我的目标是传输一个图像文件,该文件在接收方应该通过RESTAPI上传 Android 10阻止访问公共文件夹,如“下载”文件夹,从附近连接API接收的所有文件都存储在“附近”文件夹中附近连接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版本上运行良好 我可以通过执行
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下,这是行不通的。。