Android 原生 UPnP 服务发现
Posted
技术标签:
【中文标题】Android 原生 UPnP 服务发现【英文标题】:Android native UPnP service discovery 【发布时间】:2013-09-05 18:16:06 【问题描述】:来自android 4.1(在 Wi-Fi Direct 服务发现下)假设支持原生 UPnP 服务发现。
我认为它是为 Wi-Fi Direct 开发的,但可用的方法似乎是通用的。 甚至方法的 JavaDoc 也提到它搜索网络上的所有 UPnP 服务,而不仅仅是 WiFi Direct slaves/masters。
但是,我未能实现它以使其正常工作...我设法设置了所有要求,并且收到了肯定的onSuccess
回调,但我没有收到通知网络服务的onUpnpServiceAvailable
回调。我在 UPnP 上确实有 3 项服务,我可以使用 3rd-party 库发现这些服务。
有人试过这个功能吗?
final Channel mChannel;
final WifiP2pManager mManager;
WifiP2pServiceRequest mRequester;
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), new ChannelListener()
public void onChannelDisconnected()
Log.i("CI", "Channel detected!");
);
mManager.setUpnpServiceResponseListener(mChannel, new UpnpServiceResponseListener()
public void onUpnpServiceAvailable(List<String> arg0, WifiP2pDevice arg1)
Log.i("sd", "Found device!!");
);
mRequester = WifiP2pUpnpServiceRequest.newInstance();
mManager.addServiceRequest(mChannel, mRequester, new ActionListener()
public void onSuccess()
Log.i("d", "AddServiceRequest success!");
mManager.discoverServices(mChannel, new ActionListener()
public void onSuccess()
Log.i("d", "DiscoverServices success!");
public void onFailure(int reason)
);
public void onFailure(int reason)
);
【问题讨论】:
【参考方案1】:是的,我已经尝试过了,我认为这都是关于 WIFI_P2P_SERVICE - 意思是 P2P - 意思是 PeerToPeer 或“Wi-Fi Direct”或“Adhoc Wifi 模式”。换句话说,当您处于具有接入点/站模式的正常 WiFi 情况下时,它将无法工作。
除了“Wi-Fi Direct”这种情况外,我认为 Android 没有任何本机方式可以在操作系统级别监听 UPnP / SSdP。
如果有其他人想插话,请做!
【讨论】:
以上是关于Android 原生 UPnP 服务发现的主要内容,如果未能解决你的问题,请参考以下文章