Android Nsd: onServiceLost() не срабатываетAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android Nsd: onServiceLost() не срабатывает

Сообщение Anonymous »

Мне нужно подключиться из приложения Android к группе устройств Интернета вещей, которые рекламируют свои услуги с помощью mDNS.
Для этого я совместно использую NsdManager.DiscoveryListener() с NsdManager.discoverServices().
Все хорошо, когда дело доходит до обнаружения: onServiceFound() запускается, и служба разрешается с помощью NsdManager.resolveService() .
Проблема связана с onServiceLost(), который никогда не запускается. Я ожидаю, что эта функция сработает, когда устройство IoT потеряет соединение Wi-Fi.
Я запускаю DiscoverServices() и останавливаю его только при выходе из приложения Android.
Есть идеи, почему onServiceLost не срабатывает?

Вот мой код
public class MainActivity extends AppCompatActivity
{
...
public bollean serviceFound = false;
...
protected void onCreate(Bundle savedInstanceState)
{
...
nsdManager = (NsdManager) getApplicationContext().getSystemService(Context.NSD_SERVICE);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
checkpermisions();
lookForService(this);
{
...
}
...
}
public void conn_event(String constat, int color)
{
userMessage.setText(constat);
userMessage.setTextColor(color);
}

}


public class WiFiUtils
{
...
static void lookForService(MainActivity mAct)
{
if(mAct.wifiManager.isWifiEnabled() == false)
{
mAct.conn_event("WiFI activation", mAct.getResources().getColor(R.color.blue));
if(mAct.wifiManager.setWifiEnabled(true) == false)
{
mAct.conn_event("Cannot activate WiFi", mAct.getResources().getColor(R.color.red));
return;
}
}
if(mAct.wifiInfo.getNetworkId() == -1)
{
mAct.conn_event("Not connected to any WiFi networks", mAct.getResources().getColor(R.color.red));
return;
}
int localIP = mAct.wifiInfo.getIpAddress();
mAct.t.localIP = localIP;
resolveListener = new NsdManager.ResolveListener()
{
@Override
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode)
{
// Called when the resolve fails. Use the error code to debug.
Log.e(TAG, "Resolve failed: " + errorCode);
}

@Override
public void onServiceResolved(NsdServiceInfo serviceInfo)
{
Log.i(TAG, "Resolve Succeeded. " + serviceInfo);
mAct.conn_event("Service resolved", mAct.getResources().getColor(R.color.blue));
}
};
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.i(TAG, "Service discovery success" + service);
Log.i(TAG, "host: " + service.getHost());
mAct.conn_event("Service found", mAct.getResources().getColor(R.color.blue));
mAct.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);
mAct.conn_event("Service lost", mAct.getResources().getColor(R.color.red));
}

@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);
}

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


Подробнее здесь: https://stackoverflow.com/questions/791 ... -triggered
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android Nsd: onServiceLost() не срабатывает
    Anonymous » » в форуме Android
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Использовал NSD для подключения мобильного телефона Android и телевизора. когда я отправил сообщение на телевизор, возни
    Anonymous » » в форуме Android
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Я не могу найти сервис в локальной сети с помощью Android nsd
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как увеличить скорость передачи файлов с помощью Wi-Fi Direct + NSD + Java Cockets (BIO) в Android (JetPack Compose, Kot
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Невозможно зарегистрировать сервис NSD
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»