NearbyConnection:payload.asFile()。asJavaFile()在最初未授予存储权限后重试saveFile时为null

问题描述 投票:0回答:1

嘿大家我不知道这个问题来自哪里,无论是在google Nearby Connections(https://github.com/butchmarshall/react-native-google-nearby-connection)的反应原生包装中,还是在Nearby Connection本身内。我在最初未授予权限时重试保存文件有效负载时遇到问题,因为库声明payload.asFile().asJavaFile()为null。这两种情况如下:

场景1)给出读/写存储权限,用户通过Nearby Connection交换数据,调用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 Filehttps://github.com/butchmarshall/react-native-google-nearby-connection/blob/44f1699812c1f9cce37440294d7de1df438b75af/android/src/main/java/com/butchmarshall/reactnative/google/nearby/connection/NearbyConnectionModule.java#L1501在#1501 payload.asFile().asJavaFile() == null线上返回的。我觉得令人困惑的是,似乎有效载荷本身存在于我登录的adb logcat,因为payload.getType()工作正常返回2。

问题1:初始权限失败是否会导致有效负载文件内容以某种方式在NearbyConnection缓存中被销毁,因此没有任何内容可以调用payload.asFile().asJavaFile()?我觉得奇怪的是,调用payload.getType()工作,但asFile()失败。

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

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.

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

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

不相信我相信:~~我假设在某些时候这个filedata是垃圾收集,因为它最终将填补应用程序,以便在整个应用程序生命周期中都有这种情况。在这种情况下,这是否会立即发生? ~~

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

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

react-native google-nearby
1个回答
0
投票

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

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

  • 在将文件发送到您的设备之前,请尽快申请权限。
  • 通过〜/ Downloads / Nearby / {payloadId}手动查找文件。请注意,建议不要这样做,因为文件路径可能随时更改(尽管不太可能)。这类似于使用反射。
© www.soinside.com 2019 - 2024. All rights reserved.