嘿大家我不知道这个问题来自哪里,无论是在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 File
是https://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
尽管您的应用没有READ / WRITE_EXTERNAL_STORAGE,但文件仍然保存。这是因为Play Services API在特权进程中运行,与您的应用程序分开。即使您的应用程序缺少权限,Play服务仍然可以写入文件。不幸的是,在单独的进程中运行会阻止Nearby Connections写入您的私有应用程序存储。这也意味着,即使您无法读取文件,您仍然负责清理文件,否则它将无限期地保留在光盘上。
要解释有关该问题的更多信息,由于缺少权限,您无法读取该文件。在您获得onPayloadReceived时缓存此故障。我将提交一个错误以避免缓存失败,但是修复和发布新SDK需要很长时间。解决方法是......