NsdHelper

Additional

Language
Java
Version
0.1.4 (Apr 3, 2016)
Created
Feb 13, 2016
Updated
Feb 12, 2018 (Retired)
Owner
Rafał Kobyłko (rafakob)
Contributors
Rafał Kobyłko (rafakob)
Rafał Kobyłko (rafaltsh)
Tobias Baumann (baumato)
3
Activity
Badge
Generate
Download
Source code

NsdHelper

NsdHelper is a wrapper/helper library for Android Network Service Discovery. I've created it for my own purpose (mostly for discovering HTTP services in LAN) to simplify the whole NSD process. I also added couple of nice features (timeout, detailed log) and fixed a #71367 using simple FIFO queue. All public methods are well documented so it should be pretty straightforward to use.

Important!

Please note that it still under development and needs couple of tests. If you find any bugs please post an issue or create a pull request.

Install

Add it in your root build.gradle at the end of repositories:

allprojects {
 repositories {
  ...
  maven { url "https://jitpack.io" }
 }
}

Add the dependency:

dependencies {
        compile 'com.github.rafakob:NsdHelper:VERSION'
}

How to use it

Setup and config

Class NsdHelper requires activity context in order to create NsdManager instance. There is only one listener (NsdListener) for all NSD actions (registration, discovery, resolve):

public class MainActivity extends AppCompatActivity implements NsdListener {
    NsdHelper nsdHelper;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        nsdHelper = new NsdHelper(this, this);
        nsdHelper.setLogEnabled(true);
        nsdHelper.setAutoResolveEnabled(true);
        nsdHelper.setDiscoveryTimeout(30);
        ...
    }
    ...
}

Configuration methods:

  • setLogEnabled(boolean enabled) - enable logcat messages (default: false)
  • setAutoResolveEnabled(boolean enabled) - resolve service immediately after it was discovered (default: true)
  • setDiscoveryTimeout(int seconds) - if no new service has been discovered for a timeout interval, discovering will be stopped

Dont forget about internet permissions:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Registration

nsdHelper.registerService("Chat", NsdType.HTTP);
...
nsdHelper.unregisterService();

Discovery

nsdHelper.startDiscovery(NsdType.HTTP);
...
nsdHelper.stopDiscovery();

Resolve

nsdHelper.resolveService(nsdService);

Listeners

There is only one listener common for all actions. Implement NsdListener interface:

@Override
public void onNsdRegistered(NsdService registeredService) {
}

@Override
public void onNsdDiscoveryFinished() {
}

@Override
public void onNsdServiceFound(NsdService foundService) {
}

@Override
public void onNsdServiceResolved(NsdService resolvedService) {
}

@Override
public void onNsdServiceLost(NsdService lostService) {
}

@Override
public void onNsdError(String errorMessage, int errorCode, String errorSource) {
}

Example logcat output

D/NsdHelper: Service discovery started.
D/NsdHelper: Service found -> Kodi (OpenELEC)
D/NsdHelper: Service found -> ds115
D/NsdHelper: Service resolved -> Kodi (OpenELEC), OpenElec.lan/192.168.1.110, port 80, ._http._tcp
D/NsdHelper: Service resolved -> ds115, DS115.lan/192.168.1.102, port 5000, ._http._tcp
D/NsdHelper: Registered -> Chat
D/NsdHelper: Service discovery stopped.
D/NsdHelper: Unregistered -> Chat

License

Copyright 2016 Rafał Kobyłko

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.