我在这里遇到了一个问题,直到6.0版本工作正常,从6.0开始它不工作我不理解的是它是权限,但错误就像侦听器已经被NsdManager使用一样。有没有人犯过同样的错误?事先非常感谢你.
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)
代码
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());
}
发布于 2018-05-28 20:21:55
进行此更改
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:在成功或失败时接收回调。不能为空。不能用于活动服务解析。
也就是说,不要传递已经注册的监听器。
https://stackoverflow.com/questions/50566082
复制相似问题