WiFiDirect discoverServices 不断失败并出现错误 3 (NO_SERVICE_REQUESTS)
Posted
技术标签:
【中文标题】WiFiDirect discoverServices 不断失败并出现错误 3 (NO_SERVICE_REQUESTS)【英文标题】:WiFiDirect discoverServices keeps failing with error 3 (NO_SERVICE_REQUESTS) 【发布时间】:2014-02-16 21:14:32 【问题描述】:我正在为network service discovery 使用 WiFi P2P,并且我正在按照开发人员指南中概述的说明进行操作。这是我的服务类中的相关代码:
public void onCreate()
manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
channel = manager.initialize(this, getMainLooper(), null);
registerP2pService();
lookForServices();
private void registerP2pService()
WifiP2pDnsSdServiceInfo serviceInfo =
WifiP2pDnsSdServiceInfo.newInstance("_service.name", "_presence._tcp", new HashMap<String, String>());
manager.addLocalService(channel, serviceInfo, new WifiP2pManager.ActionListener()
@Override
public void onSuccess()
Log.i("tag", "REGISTERED SERVICE");
@Override
public void onFailure(int arg0)
Log.e("tag", "FAILED to register service");
);
private void setServiceListeners()
WifiP2pDnsSdServiceRequest serviceRequest = WifiP2pDnsSdServiceRequest.newInstance();
manager.addServiceRequest(channel, serviceRequest,
new WifiP2pManager.ActionListener()
@Override
public void onSuccess()
Log.d("SCOPE", "Added a service request.");
discoverServices();
@Override
public void onFailure(int code)
Log.e("tag", "Error adding service request.");
);
public void discoverServices()
manager.discoverServices(channel, new WifiP2pManager.ActionListener()
@Override
public void onSuccess()
Log.d("tag", "Service discovery was initiated");
@Override
public void onFailure(int code)
// This is where it keeps failing with error code 3 (NO_SERVICE_REQUESTS)
Log.d("SCOPE", "Service discovery failure code " + code);
);
我在重启手机后第一次运行我的服务时,服务发现启动得很好,但是如果我通过从应用程序设置页面停止服务来终止服务,然后再次打开它,它总是失败并显示错误代码 3。如果我重新启动手机并再次运行该应用程序,它就可以正常工作。我很困惑,因为我只有在成功添加服务请求时才显式调用discoverServices。
我的直觉是,这可能是由于一些与服务发现无关的代码,因为服务发现代码看起来非常简单,但如果您发现我发布的内容有任何问题,请告诉我。我在这里抓住了稻草。
我在装有 android 4.4.2 的 Nexus 5 上运行它。
【问题讨论】:
您在哪里收到错误消息?我的意思是用哪种方法?如果您查看this,我会说您的 setServiceListener 方法有问题。您是在 onStop() 还是某处停止服务? 我在manager.discoverServices()
的onFailure()
回调中收到错误消息。我不会在onStop()
或其他任何地方停止我的服务。
大概就是这样。看看this。你应该这样做。
看什么?这是什么情况?
我怀疑看到这个错误的原因是你没有停止你的服务......我在我的评论中建议了一个链接。 ***.com/questions/18679481/…希望有用。
【参考方案1】:
我在第二代 Nexus 7 上看到了同样的问题。它第一次运行良好,随后的尝试出错。具体来说,addServiceRequest
操作侦听器报告成功,但随后 discoverServices
报告 NO_SERVICE_REQUESTS。
(初次使用成功后退出应用前拆解removeLocalService
和removeServiceRequest
成功。)
虽然这不是一个理想的答案,但关闭然后再打开 wifi 似乎可以重置任何卡住的东西。这可以通过编程方式完成。
【讨论】:
是的......我想我最终做了类似的事情。我从来没有解决过这个错误。【参考方案2】:过去几周,Android 上的 WifiDirect/NSD 一直困扰着我。
上周我花了一半的时间试图弄清楚为什么我的对等发现调用会失败,而与 NO_SERVICE_REQUESTS 没有任何一致性,最终找到了一个运行良好的解决方案。这似乎是操作系统中的一个错误,幸运的是 P2Feed 的优秀人员发现了一个workaround:
if (code == WifiP2pManager.NO_SERVICE_REQUESTS)
// initiate a stop on service discovery
manager.stopPeerDiscovery(channel, new WifiP2pManager.ActionListener()
@Override
public void onSuccess()
// initiate clearing of the all service requests
manager.clearServiceRequests(channel, new WifiP2pManager.ActionListener()
@Override
public void onSuccess()
// reset the service listeners, service requests, and discovery
setServiceListeners();
@Override
public void onFailure(int i)
Log.d(TAG, "FAILED to clear service requests ");
);
@Override
public void onFailure(int i)
Log.d(TAG, "FAILED to stop discovery");
);
【讨论】:
以上是关于WiFiDirect discoverServices 不断失败并出现错误 3 (NO_SERVICE_REQUESTS)的主要内容,如果未能解决你的问题,请参考以下文章
WiFiDirect discoverServices 不断失败并出现错误 3 (NO_SERVICE_REQUESTS)