2017-04-13 4 views
0

Le résultat de l'enregistrement ne doit pas être vide, c'est ce que je reçois de logcat et le rappel d'un enregistrement réussi.Android NSD: enregistrement avec un type de service nul

registerService 46518 
onServiceRegistered name: mytest, type: null, host: null, port: 0, txtRecord:  

Tout est vide, le port 46518 qui a été généré par le système, le type, la txtrecord.

Le code suivant est de la official guide

private String mServiceName = "mytest"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     // Initialize a server socket on the next available port. 
     ServerSocket mServerSocket = new ServerSocket(0); 
     int mLocalPort = mServerSocket.getLocalPort(); 
     registerService(mLocalPort); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public void registerService(int port) { 
    Log.i(tag, "registerService " + port); 
    // Create the NsdServiceInfo object, and populate it. 
    NsdServiceInfo serviceInfo = new NsdServiceInfo(); 
    // The name is subject to change based on conflicts with other services advertised on the same network. 
    serviceInfo.setServiceName(mServiceName); 
    serviceInfo.setServiceType("_mytest._tcp"); 
    serviceInfo.setPort(port); 
    serviceInfo.setAttribute("info", android.os.Build.MODEL); 

    NsdManager mNsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE); 
    mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener); 
} 

NsdManager.RegistrationListener mRegistrationListener = new NsdManager.RegistrationListener() { 

    @Override 
    public void onServiceRegistered(NsdServiceInfo nsdServiceInfo) { 
     // Save the service name. Android may have changed it in order to 
     // resolve a conflict, so update the name you initially requested 
     // with the name Android actually used. 
     mServiceName = nsdServiceInfo.getServiceName(); 
     Log.i(tag, "onServiceRegistered " + nsdServiceInfo); 
    } 

    @Override 
    public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) { 
     // Registration failed! Put debugging code here to determine why. 
     Log.i(tag, "onRegistrationFailed code " + errorCode + "\n" + serviceInfo); 
    } 

    @Override 
    public void onServiceUnregistered(NsdServiceInfo arg0) { 
     // Service has been unregistered. This only happens when you call 
     // NsdManager.unregisterService() and pass in this listener. 
     Log.i(tag, "onServiceUnregistered " + arg0); 
    } 

    @Override 
    public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) { 
     // Unregistration failed. Put debugging code here to determine why. 
     Log.i(tag, "onRegistrationFailed code " + errorCode + "\n" + serviceInfo); 
    } 
}; 

Répondre

1

Vous avez la même chose sur mon G5 LG (Android 7.0)

Cochez cette case si les MDNS-Packets apparaissent dans Wireshark et ils l'ont fait! Il semble que le service soit annoncé avec l'adresse IP et le port corrects, même si NsdServiceInfo dans onServiceRegistered() indique quelque chose de différent.