Android Chromecast应用程序首次尝试时未连接

Android Chromecast应用程序首次尝试时未连接,android,chromecast,google-cast,Android,Chromecast,Google Cast,我正在开发一款Chromecast应用程序,它已经上市一段时间了。我们开始收到报告说,人们无法在启动Chromecast后第一次尝试连接它。直到最近,我们才能够重现这种情况(而且只有一台设备碰巧表现出这种行为) Chromecast图标显示已连接,但应用程序从未启动。最终,Chromecast图标显示它已断开连接。我从这个设备上抓到了一个logcat D/CastSocket( 1037): [MiniDeviceController-1] onWritable when state is 1

我正在开发一款Chromecast应用程序,它已经上市一段时间了。我们开始收到报告说,人们无法在启动Chromecast后第一次尝试连接它。直到最近,我们才能够重现这种情况(而且只有一台设备碰巧表现出这种行为)

Chromecast图标显示已连接,但应用程序从未启动。最终,Chromecast图标显示它已断开连接。我从这个设备上抓到了一个logcat

D/CastSocket( 1037): [MiniDeviceController-1] onWritable when state is 1
D/CastSocket( 1037): [MiniDeviceController-1] SSLException encountered. Tearing down the socket.
D/CastSocket( 1037): javax.net.ssl.SSLException: Error occured in delegated task:javax.net.ssl.SSLException: Not trusted server certificate
D/CastSocket( 1037):    at com.android.org.conscrypt.HandshakeProtocol.fatalAlert(HandshakeProtocol.java:316)
D/CastSocket( 1037):    at com.android.org.conscrypt.HandshakeProtocol.wrap(HandshakeProtocol.java:268)
D/CastSocket( 1037):    at com.android.org.conscrypt.SSLEngineImpl.wrap(SSLEngineImpl.java:693)
D/CastSocket( 1037):    at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:438)
D/CastSocket( 1037):    at beb.k(SourceFile:671)
D/CastSocket( 1037):    at bef.run(SourceFile:96)
D/CastSocket( 1037):    at java.lang.Thread.run(Thread.java:841)
D/CastSocket( 1037): Caused by: com.android.org.conscrypt.AlertException: javax.net.ssl.SSLException: Not trusted server certificate
D/CastSocket( 1037):    at com.android.org.conscrypt.HandshakeProtocol.fatalAlert(HandshakeProtocol.java:316)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl.verifyServerCert(ClientHandshakeImpl.java:559)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl.processServerHelloDone(ClientHandshakeImpl.java:373)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl$1.run(ClientHandshakeImpl.java:283)
D/CastSocket( 1037):    at com.android.org.conscrypt.DelegatedTask.run(DelegatedTask.java:36)
D/CastSocket( 1037):    at beb.a(SourceFile:721)
D/CastSocket( 1037):    at beb.j(SourceFile:635)
D/CastSocket( 1037):    ... 2 more
D/CastSocket( 1037): Caused by: javax.net.ssl.SSLException: Not trusted server certificate
D/CastSocket( 1037):    ... 9 more
D/CastSocket( 1037): Caused by: java.security.cert.CertificateNotYetValidException
D/CastSocket( 1037):    at com.android.org.conscrypt.OpenSSLX509Certificate.checkValidity(OpenSSLX509Certificate.java:216)
D/CastSocket( 1037):    at com.android.org.conscrypt.OpenSSLX509Certificate.checkValidity(OpenSSLX509Certificate.java:209)
D/CastSocket( 1037):    at bdu.checkServerTrusted(SourceFile:47)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl.verifyServerCert(ClientHandshakeImpl.java:556)
D/CastSocket( 1037):    ... 7 more
D/CastSocketMultiplexer( 1037): *** removing socket CastSocket:MiniDeviceController-1 (onWritable)
D/CastSocket( 1037): [MiniDeviceController-1] doTeardown with reason=4
D/DeviceFilter( 1037): DEACTIVATE MiniDeviceController-1; finished=false
D/DeviceFilter( 1037): socket is disconnected
D/CastMediaRouteProvider( 1037): onDeviceFilterError for 516b4a3a710d7bdfe8dc75ff4c4901a0: connection failed: error=4

这似乎都在谷歌Play服务的Chromecast API中。我们使用AmazonS3来托管和使用他们的SSL证书。奇怪的是,在这个初始错误之后,设备确实连接了。我还没能把我的脑子放在这个上面。我们的应用程序仅在Android设备上可用,并且并非所有设备都表现出这种行为。

当客户端时钟关闭时,“CertificateNotYetValidException”异常通常发生。可能遇到此问题的用户在过去设置了当前日期。您可以通过将设备的当前日期更改为过去来重现此情况。

是否可以捕获异常并重试?第二个请求应为OK当您调用connect时,是否收到onConnected()回调?不需要捕获应用程序中的异常并重试。我需要跟踪出现错误的设备,并调试是否收到OnConnect()回调。我将在测试后更新。请记住,在收到onConnected之前,您不应尝试启动应用程序。在收到onConnected回调之前,我们不会尝试启动应用程序。有趣的是,当时间为2小时时,ChromeCast无法显示。它没有重现我所描述的问题。