附近连接:payload.asFile().asJavaFile() 在最初未授予存储权限后重试保存文件时为空



大家好,我不确定这个问题起源于哪里,无论是在谷歌附近连接 (https://github.com/butchmarshall/react-native-google-nearby-connection) 的 react-native 包装器中,还是在附近连接本身中。当最初未授予权限时,我在重试保存文件有效负载时遇到问题,因为库指出payload.asFile().asJavaFile()为 null。两种方案如下:

场景 1)授予读/写存储权限,用户通过附近连接交换数据,调用saveFile(serviceId,endpointId,payloadId),文件保存没有问题。
场景 2)用户尚未授予存储权限,并且调用了saveFile(serviceId,endpointId,payloadId),这将按预期返回被拒绝的承诺。serviceId, endpointId, and payloadId的参数存储在其他位置,以便可以提示用户授予权限并重试保存。重试后,执行失败,因为payload.asFile().asJavaFile()返回 null。

我在成功执行(最初授予权限)和失败情况(授予权限后重试)期间都运行了adb logcat,并且在记录有效负载时看不到差异。以下是失败案例的日志:

03-24 14:31:03.805 24644 26856 V NearbyConnection: saveFile from service com.google.myApp.v1 and endpoint hT4- and payload -6821529802993021226
03-24 14:31:03.805 24644 26856 V NearbyConnection: Payload com.google.android.gms.nearby.connection.Payload@16edba2
03-24 14:31:03.805 24644 26856 V NearbyConnection: payload.getType() 2
03-24 14:31:03.805 24644 26856 V NearbyConnection: payloadFileData  awesomePhoto.WEBP:{"description":"a flower"}
03-24 14:31:03.805 24644 26856 V NearbyConnection: payloadFilename awesomePhoto.WEBP
03-24 14:31:03.805 24644 26856 V NearbyConnection: payloadMetadata {"description":"a flower"}
03-24 14:31:03.806 24644 26856 V NearbyConnection: Cannot convert to file.

Cannot convert to File#1501 行 https://github.com/butchmarshall/react-native-google-nearby-connection/blob/44f1699812c1f9cce37440294d7de1df438b75af/android/src/main/java/com/butchmarshall/reactnative/google/nearby/connection/NearbyConnectionModule.java#L1501payload.asFile().asJavaFile() == null时返回的内容。我感到困惑的是,似乎有效载荷本身存在于我登录adb logcat,因为返回 2payload.getType()工作正常。

问题 1:初始权限失败是否会导致有效负载文件内容以某种方式在 NearConnection 缓存中被销毁,因此无需调用payload.asFile().asJavaFile()?我觉得很奇怪,打电话payload.getType()有效,但asFile()失败了。

问题 2:是否可以将 NearConnection 有效负载文件存储在发出请求的内部应用程序中,从而避免请求/授予对外部存储的权限?

When a file is received, it is saved in the Downloads folder (DIRECTORY_DOWNLOADS) on the recipient's device with a generic name and no extension.

来源:https://developers.google.com/nearby/connections/android/exchange-data#file

假设/假设:交付最终有效负载后,附近连接会尝试写入文件,如果未授予权限,则会失败。因此,无论之后是否授予权限,最终有效负载仍将没有关联的文件,因此将永远失败。如果这是正确的,那么除了重新发送我猜的文件之外别无选择?

我认为不正确:~~ 我假设在某个时候这个文件数据是垃圾收集的,因为它最终会填满应用程序,让它在整个应用程序生命周期中徘徊。在这种情况下,这会立即发生吗?~~

这里的任何想法将不胜感激。

Github问题:https://github.com/butchmarshall/react-native-google-nearby-connection/issues/4

尽管你的应用没有 READ/WRITE_EXTERNAL_STORAGE,文件也会保存。这是因为 Play 服务 API 是在特权进程中运行的,与您的应用是分开的。即使您的应用缺少权限,Play 服务仍然可以写入文件。不幸的是,在单独的进程中运行会阻止附近连接写入您的专用应用程序存储。这也意味着,即使您无法读取文件,您仍然负责清理文件,否则它将无限期地保留在光盘上。

为了解释有关该问题的更多信息,由于缺少权限,您无法读取该文件。此失败缓存在您获得 onPayloadReceived 时。我将提交一个 bug 以避免缓存失败,但修复和发布新的 SDK 需要很长时间。解决方法是...

  • 将文件发送到您的设备之前,请尽快请求权限。
  • 通过~/Downloads/Near/{payloadId}手动查找文件。请注意,不建议这样做,因为文件路径可能随时更改(尽管不太可能)。这类似于使用反射。

最新更新