У меня есть приложение, которое работает на 2 телефонах и позволяет пользователю подключаться с одного на другой с помощью WifiP2p (WiFi Direct).На большинстве телефонов это работает.Оба телефона открывают одноранговое обнаружение, они обнаруживают друг друга, один инициирует соединение, а другой принимает.Но когда я пытаюсь подключиться к Sony LT25i под управлением Android 4.1.2, сопряжение не удается.
Код для инициирования подключения выглядит следующим образом:
WifiP2pConfig wifiP2pConfig = new WifiP2pConfig();
wifiP2pConfig.deviceAddress = device.deviceAddress;
// Try to make a device that supports WifiDirect the group owner,
// so that a legacy device can connect to it as an access point.
wifiP2pConfig.groupOwnerIntent = 10;
// Wifi Protected Setup: Push Button Configuration. The other main option is PIN configuration.
wifiP2pConfig.wps.setup = WpsInfo.PBC;
mWifiP2pManager.connect(mChannel, wifiP2pConfig, new WifiP2pManager.ActionListener() {...
Неожиданное создание группы, удалитьсеть
Когда возникает проблема, когда инициирующее устройство запускает вышеуказанный код для попытки подключения, Sony показывает этот интересный фрагмент в Logcat:
02-02 05:22:55.494 669-781/? E/WifiP2pService: Unexpected group creation,
remove network: DIRECT-aq-LG Phoenix 2
isGO: false
GO: Device:
deviceAddress: de:0b:34:f0:11:78
primary type: null
secondary type: null
wps: 0
grpcapab: 0
devcapab: 0
status: 4
interface: p2p0
, где "LG Phoenix 2"имя телефона, инициирующего сопряжение.
По какой-то причине WifiP2pService не нравится тот факт, что группа создается, и удаляет ее .Почему?
Я посмотрел сообщение об ошибке «WifiP2pService: неожиданное создание группы, удалим» и обнаружил этот код в WifiP2pService.DefaultState.processMessage()
:
/* unexpected group created, remove */
case WifiMonitor.P2P_GROUP_STARTED_EVENT:
mGroup = (WifiP2pGroup) message.obj;
loge("Unexpected group creation, remove " + mGroup);
mWifiNative.p2pGroupRemove(mGroup.getInterface());
break;
Так, очевидно, этопроисходит потому, что WifiP2pService находится в DefaultState
?Напротив, WifiP2pService.P2pEnabledState.processMessage()
не имеет case
для P2P_GROUP_STARTED_EVENT
.Так что, возможно, если бы WifiP2pService находился в P2pEnabledState на телефоне, у меня не было бы этой проблемы с удалением группы.
Но согласно журналам, WifiP2p включен : я ловлю трансляцию WIFI_P2P_STATE_CHANGED_ACTION
и записываю значение EXTRA_WIFI_STATE
.Так почему же WifiP2pService находится в DefaultState
?
Кстати, при соединении использовалось для работы на Sony, но вчера я подключил устройство к своему домашнему маршрутизатору Wifi, и это не такпохоже, с тех пор работает, хотя я отключил его от роутера.
Я пытался отключить Wi-Fi, включить его снова, удалить («забыть») мой домашний маршрутизатор Wi-Fi и перезагрузить телефоныи подключение с других телефонов, кроме LG.Ничто не решает проблему.