首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSD发现服务android

NSD发现服务android
EN

Stack Overflow用户
提问于 2021-05-23 22:56:37
回答 2查看 211关注 0票数 0

任务描述:我打算构建一个应用程序,可以使用NSD在我的网络中发现ESP32提供的服务,所以我实现了下面的代码:

代码语言:javascript
复制
import android.net.DhcpInfo;
import  android.net.nsd.NsdManager;
import android.net.nsd.NsdManager.DiscoveryListener;
import android.util.Log;
import android.net.nsd.NsdServiceInfo;
import android.text.format.Formatter;

import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.net.InetAddress;
import  java.io.IOException;
import  java.net.UnknownHostException;
//import android.app.Activity;


import java.lang.reflect.Method;

 public  class MusicList extends org.qtproject.qt5.android.bindings.QtActivity {


     public static String getWifiName(Context context) throws IOException {
             WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
             final DhcpInfo dhcp = manager.getDhcpInfo();
             InetAddress localhost = null;
             //byte[] localHostIp = InetAddress.getLocalHost().getAddress();
             //String string = new String(localHostIp);
             //InetAddress in= null;
             //in = InetAddress.getByName(Formatter.formatIpAddress(dhcp.gateway));

             if (manager.isWifiEnabled()) {
                WifiInfo wifiInfo = manager.getConnectionInfo();
                if (wifiInfo != null) {
                   DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());
                   if (state == DetailedState.CONNECTED || state == DetailedState.OBTAINING_IPADDR) {



                                              System.out.println(Formatter.formatIpAddress(dhcp.gateway));
                                              System.out.println(Formatter.formatIpAddress(dhcp.netmask));
                                              
                                              



                       return wifiInfo.getSSID()+"/"+Formatter.formatIpAddress(dhcp.gateway)+"/"+Formatter.formatIpAddress(dhcp.netmask);

                   }
                }
             }
            else {
                manager.setWifiEnabled(true);

                }
          return null;
         }

     public void initializeDiscoveryListener() {

         // Instantiate a new DiscoveryListener

         discoveryListener = new NsdManager.DiscoveryListener() {

             // Called as soon as service discovery begins.
             @Override
             public void onDiscoveryStarted(String regType) {
                 Log.d(TAG, "Service discovery started");
             }

             @Override
             public void onServiceFound(NsdServiceInfo service) {
                 // A service was found! Do something with it.
                 Log.d(TAG, "Service discovery success" + service);
                 if (!service.getServiceType().equals(SERVICE_TYPE)) {
                     // Service type is the string containing the protocol and
                     // transport layer for this service.
                     Log.d(TAG, "Unknown Service Type: " + service.getServiceType());
                 } else if (service.getServiceName().equals(serviceName)) {
                     // The name of the service tells the user what they'd be
                     // connecting to. It could be "Bob's Chat App".
                     Log.d(TAG, "Same machine: " + serviceName);
                 } else if (service.getServiceName().contains("NsdChat")){
                     nsdManager.resolveService(service, resolveListener);
                 }
             }

             @Override
             public void onServiceLost(NsdServiceInfo service) {
                 // When the network service is no longer available.
                 // Internal bookkeeping code goes here.
                 Log.e(TAG, "service lost: " + service);
             }

             @Override
             public void onDiscoveryStopped(String serviceType) {
                 Log.i(TAG, "Discovery stopped: " + serviceType);
             }

             @Override
             public void onStartDiscoveryFailed(String serviceType, int errorCode) {
                 Log.e(TAG, "Discovery failed: Error code:" + errorCode);
                 nsdManager.stopServiceDiscovery(this);
             }

             @Override
             public void onStopDiscoveryFailed(String serviceType, int errorCode) {
                 Log.e(TAG, "Discovery failed: Error code:" + errorCode);
                 nsdManager.stopServiceDiscovery(this);
             }
         };
     }

 public void discoverServices(){
     nsdManager = Context.getSystemService(Context.NSD_SERVICE);
     nsdManager.discoverServices("_http._tcp.", NsdManager.PROTOCOL_DNS_SD, discoveryListener);



     }


}

但我得到了以下错误:

D:\ProgQt\build-app-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_15__for_Android-Debug\android-build\src\org\qtproject\example\musiclist\MusicList.java:127:错误:找不到符号discoveryListener =新的NsdManager.DiscoveryListener() {^

代码语言:javascript
复制
                 ^

能帮我一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-24 03:24:48

你忘了把变量的类型。如果应该是NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() {

nsdManager也会遇到同样的问题。在最后一个函数中,因为您使用discoveryListener而没有定义它。当您从某个地方复制粘贴此代码时,您是否忘记复制粘贴类的实例变量?

票数 0
EN

Stack Overflow用户

发布于 2021-05-25 23:01:07

总是在同一条路上,我遇到了这个问题

:\ProgQt\build-app-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_15__for_Android-Debug\android-build\src\org\qtproject\example\musiclist\MusicList.java:188:错误:非静态变量discoveryListener不能从静态上下文nsdManager.discoverServices("_http._tcp.“、NsdManager.PROTOCOL_DNS_SD、discoveryListener)引用;

代码语言:javascript
复制
public void initializeDiscoveryListener() {

         // Instantiate a new DiscoveryListener

           discoveryListener = new NsdManager.DiscoveryListener() {

             // Called as soon as service discovery begins.
             @Override
             public void onDiscoveryStarted(String regType) {
                 Log.d(TAG, "Service discovery started");
             }

             @Override
             public void onServiceFound(NsdServiceInfo service) {
                 // A service was found! Do something with it.
                 Log.d(TAG, "Service discovery success" + service);
                 if (!service.getServiceType().equals(SERVICE_TYPE)) {
                     // Service type is the string containing the protocol and
                     // transport layer for this service.
                     Log.d(TAG, "Unknown Service Type: " + service.getServiceType());
                 } else if (service.getServiceName().equals(serviceName)) {
                     // The name of the service tells the user what they'd be
                     // connecting to. It could be "Bob's Chat App".
                     Log.d(TAG, "Same machine: " + serviceName);
                 } else if (service.getServiceName().contains("NsdChat")){
                    // nsdManager.resolveService(service, resolveListener);
                 }
             }

             @Override
             public void onServiceLost(NsdServiceInfo service) {
                 // When the network service is no longer available.
                 // Internal bookkeeping code goes here.
                 Log.e(TAG, "service lost: " + service);
             }

             @Override
             public void onDiscoveryStopped(String serviceType) {
                 Log.i(TAG, "Discovery stopped: " + serviceType);
             }

             @Override
             public void onStartDiscoveryFailed(String serviceType, int errorCode) {
                 Log.e(TAG, "Discovery failed: Error code:" + errorCode);
                 nsdManager.stopServiceDiscovery(this);
             }

             @Override
             public void onStopDiscoveryFailed(String serviceType, int errorCode) {
                 Log.e(TAG, "Discovery failed: Error code:" + errorCode);
                 nsdManager.stopServiceDiscovery(this);
             }
         };
     }

 public static void discover(){
     System.out.println("discoverServices");

     nsdManager.discoverServices("_http._tcp.", NsdManager.PROTOCOL_DNS_SD, discoveryListener);


 }
     //nsdManager = (NsdManager)c.getSystemService(Context.NSD_SERVICE);






}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67665090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档