gpt4 book ai didi

java - android 11 如何访问使用 Nearby Connections API 传输的文件,因为文件存储在 Nearby 的范围存储中?

转载 作者:行者123 更新时间:2023-12-04 07:56:37 27 4
gpt4 key购买 nike

我正在尝试使用 googles Nearby Connections API 传输文件。在很大程度上,我可以让传输的所有组件正常工作,以便传输所有文件数据,但问题是文件数据随后存储在 Nearby 的范围存储中,因此我无法从我的应用程序访问它以进行处理将该数据转换为适当的文件类型,然后根据需要保存和重命名。
我用来尝试处理有效负载的当前方法是

private void processFilePayload(long payloadId) {

// BYTES and FILE could be received in any order, so we call when either the BYTES or the FILE
// payload is completely received. The file payload is considered complete only when both have
// been received.
Payload filePayload = completedFilePayloads.get(payloadId);
String filename = filePayloadFilenames.get(payloadId);

if (filePayload != null && filename != null) {
completedFilePayloads.remove(payloadId);
filePayloadFilenames.remove(payloadId);

// Get the received file (which will be in the Downloads folder)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

File fromPayload = filePayload.asFile().asJavaFile();
Uri uri = Uri.fromFile(fromPayload);

try {
// Copy the file to a new location.
InputStream in = getApplicationContext().getContentResolver().openInputStream(uri);
copyStream(in, new FileOutputStream(new File(getApplicationContext().getCacheDir(), filename)));
} catch (IOException e) {
// Log the error.
Log.e("copy file", e.toString());
} finally {
// Delete the original file.
getApplicationContext().getContentResolver().delete(uri, null, null);
}

} else {
File payloadFile = filePayload.asFile().asJavaFile();

// Rename the file.
payloadFile.renameTo(new File(payloadFile.getParentFile(), filename));
}
}
}

});
由于 android 11 的范围存储能够访问文件,需要使用文件 Uri 来创建带有内容解析器的输入流以访问文件。
根据 Nearby Documentation 应该有一个方法 Payload.File.asUri 这样我就可以使用行 Uri payloadUri = filePayload.asFile().asUri();但这在 API 中实际上并不可用,尽管使用的是 Nearby 的最新版本。
以及 Payload.File.AsJavaFile() 的使用根据 google Nearby 文档,应该弃用
我已经看到类似问题的一些其他答案,其中建议使用 Media.Store 但这不可能,因为文件没有任何扩展名,因此不会显示为任何特定文件类型。
注意:我已在 list 和运行时请求读/写外部存储权限。

最佳答案

===更新===
Payload.asFile.asUri() 在 com.google.android.gms:play-services-nearby:18.0.0 中可用
============
对于那个很抱歉。我们将很快发布更新并正确公开 #asUri。
同时,如果您的目标是 API 29,您可以使用 requestLegacyExternalStorage=true 作为解决方法。 (查看更多:https://developer.android.com/about/versions/11/privacy/storage)

关于java - android 11 如何访问使用 Nearby Connections API 传输的文件,因为文件存储在 Nearby 的范围存储中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66670258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com