【问题标题】:WiFiDirect discoverServices keeps failing with error 3 (NO_SERVICE_REQUESTS)WiFiDirect discoverServices 不断失败并出现错误 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。你应该这样做。
  • 看什么?这是什么情况?
  • 我怀疑看到这个错误的原因是你没有停止你的服务......我在我的评论中建议了一个链接。 stackoverflow.com/questions/18679481/…希望有用。

标签: android android-service wifi-direct service-discovery wifip2p


【解决方案1】:

我在第二代 Nexus 7 上看到了同样的问题。它第一次运行良好,随后的尝试出错。具体来说,addServiceRequest 操作侦听器报告成功,但随后 discoverServices 报告 NO_SERVICE_REQUESTS。

(初次使用成功后退出应用前拆解removeLocalServiceremoveServiceRequest成功。)

虽然这不是一个理想的答案,但关闭然后再打开 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");
        }
    });
}

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2016-04-01
    • 2020-02-09
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2020-05-27
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多