Прямой Wi-Fi:как часто вызывать peer discovery?
-
26-12-2019 - |
Вопрос
Я разрабатываю P2P-приложение и следовал руководству здесь и пока я тестировал это на 2 телефонах, я размышлял, когда я должен инициировать обнаружение одноранговых узлов?
Только один раз при запуске приложения, периодически или каждый раз в onResume
?
Я спрашиваю, потому что иногда, когда я пытаюсь показать список одноранговых узлов, он не может найти ни одного. Я также хотел бы знать причину этого И что на самом деле представляет собой peer discovery и что оно делает.
Решение
Я запускаю обнаружение через слушателей, зарегистрированных в приложении, каждые "x" секунд, и да, вы также хотели бы инициировать обнаружение onResume().Кроме того, я полагаю, вы уже используете широковещательные намерения чтобы определить изменение состояния.
Однако я не могу уточнить внутренние параметры обнаружения P2P, но обнаружение может завершиться неудачей из-за занятости сети, или из-за внутренней ошибки, или просто потому, что устройство не поддерживает P2P, как упоминалось ранее здесь.
Другие советы
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Toast.makeText(MainActivity.this, "onSuccess", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int reasonCode) {
switch(reasonCode){
case WifiP2pManager.ERROR:
Toast.makeText(MainActivity.this, "Getting error while peers discover", Toast.LENGTH_SHORT).show();
break;
case WifiP2pManager.P2P_UNSUPPORTED:
Toast.makeText(MainActivity.this, "Device is not supported", Toast.LENGTH_SHORT).show();
break;
case WifiP2pManager.BUSY:
Toast.makeText(MainActivity.this, "Device is busy", Toast.LENGTH_SHORT).show();
break;
}
}
});