首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NdsManager安卓错误

NdsManager安卓错误
EN

Stack Overflow用户
提问于 2018-05-28 20:06:54
回答 1查看 270关注 0票数 1

我在这里遇到了一个问题,直到6.0版本工作正常,从6.0开始它不工作我不理解的是它是权限,但错误就像侦听器已经被NsdManager使用一样。有没有人犯过同样的错误?事先非常感谢你.

代码语言:javascript
复制
java.lang.IllegalArgumentException: listener already in useat android.net.nsd.NsdManager.registerService(NsdManager.java:485)
          at br.com.shootinghouse.sc.ServerActivity.registerService(ServerActivity.java:76)
          at br.com.shootinghouse.sc.ServerActivity.onResume(ServerActivity.java:50)
          at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269)
          at android.app.Activity.performResume(Activity.java:6783)
          at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3406)
          at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3469)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2732)
          at android.app.ActivityThread.-wrap12(ActivityThread.java)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:154)
          at android.app.ActivityThread.main(ActivityThread.java:6119)
          at java.lang.reflect.Method.invoke(Native Method)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

代码

代码语言:javascript
复制
public class ServerActivity extends MonitorarSerChamadoActivity {
private Manager manager;
private LiteListener listener;
private String SERVICE_NAME = "Server device";
private String SERVICE_TYPE = "_http._tcp.";
private int SERVICE_Port = 5432;
private NsdManager mNsdManager;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mNsdManager = (NsdManager) getSystemService(getApplicationContext().NSD_SERVICE);
    registerService(SERVICE_Port);
    try {
        manager = new Manager(new AndroidContext(getApplicationContext()), Manager.DEFAULT_OPTIONS);
    } catch (Throwable e) {
        e.printStackTrace();
    }
    startListener();
    URL url = null;
    try {
        url = new URL("http://" + getLocalIpAddress() + ":" + SERVICE_Port + "/banco144");
    } catch (Throwable e) {
        e.printStackTrace();
    }
    System.out.println("Listening on :: " + url.toString() + " "
            + SERVICE_NAME + " " +
            SERVICE_TYPE);
}
@Override
protected void onResume() {
    super.onResume();
    if (mNsdManager != null) {
        registerService(SERVICE_Port);
    }

}
void startListener() {
    listener = new LiteListener(manager, SERVICE_Port, null);
    Thread thread = new Thread(listener);
    thread.start();
}
@Override
protected void onDestroy() {
    if (mNsdManager != null) {
        mNsdManager.unregisterService(mRegistrationListener);
    }
    super.onDestroy();
}
public void registerService(int port) {
    NsdServiceInfo serviceInfo = new NsdServiceInfo();
    serviceInfo.setServiceName(SERVICE_NAME);
    serviceInfo.setServiceType(SERVICE_TYPE);
    serviceInfo.setPort(port);
    try {
        mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
NsdManager.RegistrationListener mRegistrationListener = new NsdManager.RegistrationListener() {
    @Override
    public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
        SERVICE_NAME = NsdServiceInfo.getServiceName();
    }
    @Override
    public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
    }
    @Override
    public void onServiceUnregistered(NsdServiceInfo serviceInfo) {
    }
    @Override
    public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
    }
};
public String getLocalIpAddress() {
    WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
    return Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 20:21:55

进行此更改

代码语言:javascript
复制
mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, new NsdManager.RegistrationListener() {
        @Override
        public void onRegistrationFailed(NsdServiceInfo nsdServiceInfo, int i) {

        }

        @Override
        public void onUnregistrationFailed(NsdServiceInfo nsdServiceInfo, int i) {

        }

        @Override
        public void onServiceRegistered(NsdServiceInfo nsdServiceInfo) {

        }

        @Override
        public void onServiceUnregistered(NsdServiceInfo nsdServiceInfo) {

        }
    });

NsdManager.ResolveListener:在成功或失败时接收回调。不能为空。不能用于活动服务解析。

也就是说,不要传递已经注册的监听器。

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

https://stackoverflow.com/questions/50566082

复制
相关文章

相似问题

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