Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否可以通过编程检测当前WiFi网络上是否有Chromecast设备?_Java_Android_Chromecast - Fatal编程技术网

Java 我是否可以通过编程检测当前WiFi网络上是否有Chromecast设备?

Java 我是否可以通过编程检测当前WiFi网络上是否有Chromecast设备?,java,android,chromecast,Java,Android,Chromecast,是否可以检测当前WiFi网络上是否存在Chromecast设备。我看到有一个Cast SDK,但我找不到任何关于搜索设备的信息。以前从未使用过此SDK,我可能忽略了它。Chromecast设备可以使用avahi和类型为_googlecast的设备进行发现。_tcp $ avahi-browse -r _googlecast._tcp + eth0 IPv4 Living Room _googlecast._tcp l

是否可以检测当前WiFi网络上是否存在Chromecast设备。我看到有一个Cast SDK,但我找不到任何关于搜索设备的信息。以前从未使用过此SDK,我可能忽略了它。

Chromecast设备可以使用avahi和类型为_googlecast的设备进行发现。_tcp

$ avahi-browse -r _googlecast._tcp
+   eth0 IPv4 Living Room                                   _googlecast._tcp     local
=   eth0 IPv4 Living Room                                   _googlecast._tcp     local
   hostname = [Living\032Room.local]
   address = [192.168.1.100]
   port = [8009]
   txt = ["st=0" "fn=Living Room" "ca=5" "ic=/setup/icon.png" "md=Chromecast" "ve=02" "id=c832a30b81ab84a706c82745438fcd64"]
遵循以下步骤,您无需扫描
Chromecast
设备即可从
Android
应用程序提供内容。通过使用
ActionBarActivity
对其进行扩展,然后在onCreateOptions菜单()中添加一个
ActionBar
选项项,可以将强制转换按钮添加到
活动中

app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
作为行动

您可以找到有关如何发送到Chromecast的完整示例。如果出于任何原因需要手动扫描,您可以使用
Android
MediaRouters
API,引用文档:

可以使用Android MediaRouter执行Cast设备发现 Android支持库中的API,与 安卓2.1


您可以在不使用强制转换按钮的情况下执行查找;您需要使用v7支持库中的媒体路由器(也需要v7 appcompat支持),然后从代码中获取媒体路由器的实例,定义选择器(这基本上是一个过滤器,可以缩小您感兴趣的设备的范围),然后添加回调以启动发现。当发现设备时(异步),将调用您的回调。看看这个示例,特别是这个示例,它完全满足您的需要。

您可以在本地网络中使用SSDP(简单服务发现协议),ST(服务类型)为:

urn:拨号多屏幕组织:服务:拨号:1

您的SSDP查询应该如下所示:

M-SEARCH * HTTP/1.1\r\n
Host: 239.255.255.250:1900\r\n
MAN: "ssdp:discover"\r\n
MX: 3\r\n
ST: urn:dial-multiscreen-org:service:dial:1\r\n\r\n
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <specVersion>
      <major>1</major>
      <minor>0</minor>
   </specVersion>
   <URLBase>http://192.168.0.0:8008</URLBase>
   <device>
      <deviceType>urn:dial-multiscreen-org:device:dial:1</deviceType>
      <friendlyName>Chromecast</friendlyName>
      <manufacturer>Google Inc.</manufacturer>
      <modelName>Eureka Dongle</modelName>
      <UDN>uuid:3c7f2a1e-dbd2-f94d-b456-816555a9d1f9</UDN>
      <iconList>
         <icon>
            <mimetype>image/png</mimetype>
            <width>98</width>
            <height>55</height>
            <depth>32</depth>
            <url>/setup/icon.png</url>
         </icon>
      </iconList>
      <serviceList>
         <service>
            <serviceType>urn:dial-multiscreen-org:service:dial:1</serviceType>
            <serviceId>urn:dial-multiscreen-org:serviceId:dial</serviceId>
            <controlURL>/ssdp/notfound</controlURL>
            <eventSubURL>/ssdp/notfound</eventSubURL>
            <SCPDURL>/ssdp/notfound</SCPDURL>
         </service>
      </serviceList>
   </device>
</root>
您将获得支持这些服务类型(如Chromecast)的所有设备(IP和端口)的列表。然后,您可以从此IP:8008中提取一个xml文件,以检查它是否真的是Chromecast设备:

http://IP:8008/ssdp/device-desc.xml

响应如下所示:

M-SEARCH * HTTP/1.1\r\n
Host: 239.255.255.250:1900\r\n
MAN: "ssdp:discover"\r\n
MX: 3\r\n
ST: urn:dial-multiscreen-org:service:dial:1\r\n\r\n
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <specVersion>
      <major>1</major>
      <minor>0</minor>
   </specVersion>
   <URLBase>http://192.168.0.0:8008</URLBase>
   <device>
      <deviceType>urn:dial-multiscreen-org:device:dial:1</deviceType>
      <friendlyName>Chromecast</friendlyName>
      <manufacturer>Google Inc.</manufacturer>
      <modelName>Eureka Dongle</modelName>
      <UDN>uuid:3c7f2a1e-dbd2-f94d-b456-816555a9d1f9</UDN>
      <iconList>
         <icon>
            <mimetype>image/png</mimetype>
            <width>98</width>
            <height>55</height>
            <depth>32</depth>
            <url>/setup/icon.png</url>
         </icon>
      </iconList>
      <serviceList>
         <service>
            <serviceType>urn:dial-multiscreen-org:service:dial:1</serviceType>
            <serviceId>urn:dial-multiscreen-org:serviceId:dial</serviceId>
            <controlURL>/ssdp/notfound</controlURL>
            <eventSubURL>/ssdp/notfound</eventSubURL>
            <SCPDURL>/ssdp/notfound</SCPDURL>
         </service>
      </serviceList>
   </device>
</root>

1.
0
http://192.168.0.0:8008
urn:拨号多屏幕组织:设备:拨号:1
铬石膏
谷歌公司。
尤里卡狗
uuid:3c7f2a1e-dbd2-f94d-b456-816555a9d1f9
图像/png
98
55
32
/setup/icon.png
urn:拨号多屏幕组织:服务:拨号:1
urn:dial多屏幕组织:serviceId:dial
/ssdp/未找到
/ssdp/未找到
/ssdp/未找到
更多信息请点击此处:

如果您想将某些内容流式传输到您的Chromecast,您可以通过拨打以下电话获取有关Chromecast应用程序的信息:


http://IP:8008/apps/ChromeCast

一个非常简单的解决方案是使用
com.youview.tinydnssd.DiscoverResolver
。以下是我的实施:

DiscoverResolver resolver = new DiscoverResolver(ctx, "_googlecast._tcp.", new DiscoverResolverHandler());

DiscoverResolverHandler()
中,可以处理结果

我们应该将哪个应用程序id值传递到
CastMediaControlIntent.categoryForCast()