- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个应用程序,该应用程序使用 UPNP 通过 UPNP 发现电视机顶盒,以便将在设备上拍摄的照片显示在电视上。
在 onCreate
中,我获取管理器并初始化 channel 。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);
mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
mManager.setUpnpServiceResponseListener(mChannel, new WifiP2pManager.UpnpServiceResponseListener() {
@Override
public void onUpnpServiceAvailable(List<String> uniqueServiceNames, WifiP2pDevice srcDevice) {
UpnpServices service = new UpnpServices(uniqueServiceNames, srcDevice);
mPeers.add(service);
}
});
}
在 onPause
中,我调用了我的 setServiceListeners
例程:
private void setServiceListeners()
{
mManager.addServiceRequest(mChannel, WifiP2pServiceRequest.newInstance(WifiP2pServiceInfo.SERVICE_TYPE_UPNP), mRequestListener);
mManager.discoverServices(mChannel, mActionListener);
}
在 LogCat 中一切似乎都是成功的,但从未调用 UpnpServiceResponseListener
并且当我尝试嗅探网络时我没有看到任何 UPNP 流量 - 没有 IGMP 加入,没有 SSDP,什么都没有。
我在这里缺少一个步骤吗?从我所看到的一切(包括 http://developer.android.com/guide/topics/connectivity/wifip2p.html 等)来看,我正在做我应该做的事情。
TIA 提供任何帮助来解决这个问题。
最佳答案
如您所知,UPnP 服务属于 UPnP 设备。所以你需要先获取 WifiP2pDevice
实例并连接/加入它。
参见 http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html#connect(android.net.wifi.p2p.WifiP2pManager.Channel , android.net.wifi.p2p.WifiP2pConfig, android.net.wifi.p2p.WifiP2pManager.ActionListener)
关于Android:WifiP2pManager.discoverServices 没有发送 UPNP 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27639379/
我是一名优秀的程序员,十分优秀!