在某些 Android 设备上未发现 Chromecast 设备

Posted

技术标签:

【中文标题】在某些 Android 设备上未发现 Chromecast 设备【英文标题】:Chromecast device is not discovered on some Android devices 【发布时间】:2014-10-17 07:21:21 【问题描述】:

最近,我们在 android 应用程序中添加了对 Chromecast 的支持,但在对各种移动设备(手机和平板电脑)进行扩展测试时发现,在许多设备上,Flipps 应用程序没有发现 Chromecast。在我们使用从https://github.com/googlecast/CastVideos-android 下载的最新版本的官方 Chromecast SDK 演示应用程序(主分支,6 月 30 日更新并观察到类似结果 - 未发现 Chromecast 设备)测试的相同设备上,比我们测试的更多。

简而言之,我们的实现如下 - 我们扩展 VideoCastConsumerImpl 侦听器并将其添加到在 AmsApplication 中初始化的 VideoCastManager 对象(AmsApplication 是应用应用程序类):

this.controller = AmsApplication.getApplication().getSharingService().getDeviceController();
try 
   mCastManager = AmsApplication.getCastManager(context);
   mCastConsumer = new VideoCastConsumerImpl() 

        @Override
        public void onFailed(int resourceId, int statusCode) 

        

        @Override
        public void onConnectionSuspended(int cause) 

        

        @Override
        public void onConnectivityRecovered() 

  

        @Override
        public void onCastDeviceDetected(final RouteInfo info) 
            CastDevice dev = new CastDevice(info, mCastManager);
            controller.onDeviceAdded(dev);
        
   ;
   mCastManager.addVideoCastConsumer(mCastConsumer);
   isActive = true;
 catch (Exception ex) 
   Log.e(TAG, "Error initializing cast manager", ex);
 

不幸的是,即使 Chromecast 设备可用并在同一个 WiFi 网络中注册,也没有调用任何回调。演示应用的实现和行为也类似。

因此,我们基于 mDNS 协议(使用 JmDNS 库,版本 3.4.1)实现了我们自己的设备发现机制。结果发现 Chromecast 设备,并通过使用反射调用私有类构造函数来构造 CastDevice 类型的对象。 CastDevice 对象被设置为已经初始化的VideoCastManager 对象(方法:public void setDevice(CastDevice device, boolean stopAppOnExit)),该对象随后调用connect() 类的connect() 方法。大约 15 秒后返回网络错误。

上面的所有错误状态都在所有测试设备上一致地重现。以下是我们能够重现该问题的设备列表(包括操作系统和 Google Play 服务版本):

设备型号 |安卓 |谷歌播放服务

HTC One X | 4.2.2 | 5.0.84 (1259630-036)

三星 Galaxy S4 (GT-I9505) | 4.4.2 | 5.0.84 (1259630-038)

三星 Galaxy S4 mini (GT-I9195) | 4.2.2 | 3.2.25 (761454-30)

三星 Galaxy TAB3 (GT-P5200) | 4.2.2 | 5.0.84 (1259630-070)

摩托罗拉 XOOM (MZ601) | 3.2 | 5.0.84 (1259630-032)

索尼平板电脑 | 4.0.3 | 4.3.25(1117461-032)

Nexus 5 | 4.4.4 | 5.0.89

另一方面,Chromecast 已成功发现,并且可以在以下设备列表上正常运行:

设备型号 |安卓 |谷歌播放服务

HTC One | 4.4.2 | 5.0.88 (1297476-038)

三星 Galaxy S3 (GT-I9300) | 4.3 | 5.0.84 (1259630-036)

HTC One S | 4.0.4 | 5.0.84 (1259630-036)

三星 Galaxy 7 TAB2 (GT-P3100) | 4.1.2 | 5.0.84 (1259630-032)

三星 Galaxy S2 (GT-9105P) | 4.2.2 | 5.0.84 (1259630-034)

三星 Galaxy Nexus | 4.2.1 | 5.0.84 (1259630-036)

索尼 Xperia Z | 4.2.2 | 5.0.84 (1259630-038)

Nexus 7 (ME370T) | 4.3 | 5.0.84 (1259630-030)

【问题讨论】:

Stack Overflow 用于编程问题。你有什么问题? 【参考方案1】:

我在 Galaxy S4 (GT-I9505) 上也遇到过类似的问题,有一段时间没有安装任何更新。

我的应用无法连接或发现 Chromecast,但 YouTube 客户端可以。

固件更新并没有解决它,但在从 Play 商店更新“AllShare Cast Dongle S/W Update”后发现 Chromecast,此后我没有发现任何问题。在我登录 Play 商店后立即建议更新。

【讨论】:

以上是关于在某些 Android 设备上未发现 Chromecast 设备的主要内容,如果未能解决你的问题,请参考以下文章

对于某些 android 设备,GCM 消息在 GCM 服务器上停留在“已接受”状态

安装了 iOS 12 或更高版本的 iOS 设备上未显示 Chrome cast 图标

在某些 Android 设备/Chrome 上的 HTML5 数字输入中没有小数位

在 Android 设备上未调用 onLocationChanged()

Chrome 上未设置第三方 cookie(Django 应用程序)

在 android 中关闭应用程序时,在真实设备上未收到一个信号通知