【发布时间】: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 用于编程问题。你有什么问题?