Я пытаюсь заставить два устройства Android взаимодействовать друг с другом с помощью WiFi Direct. Я перечисляю доступные устройства в ListView
, и когда пользователь нажимает на устройство, я запускаю соединение, вызывая метод connect из класса WifiP2pManager. В методе onSucces
я вызываю метод requestConnectionInfo
, чтобы получить IP-адрес владельца группы, чтобы я мог подключиться к ServerSocket
.Android Wi-Fi Direct: объект WifiP2pInfo передан onConnectionInfoAvailable callback имеет свойство null groupOwnerAddress
Проблема в том, что в первый раз, когда я пытаюсь подключить объект WifiP2pInfo
, переданный по адресу onConnectionInfoAvailable
, обратный вызов имеет значение null groupOwnerAddress
. Это не имеет смысла для меня, потому что я вызываю reuestConnectionInfo
внутри обратного вызова onSuccess
метода подключения, то есть соединение уже установлено.
Если я попытаюсь подключиться снова, нажав на имя устройства снова), через несколько секунд объект WifiP2pInfo
теперь содержит адрес GO, и я могу инициировать TCP-соединение.
Я попытался сделать нить сна в течение нескольких секунд, прежде чем вызывать requestConnectionInfo, но у меня все еще такая же проблема.
@Override
public void onDialogPositiveClick(DialogFragment dialog, final String enteredPin) {
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = mDevice.deviceAddress;
config.groupOwnerIntent = 0;
mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
mManager.requestConnectionInfo(mChannel, new WifiP2pManager.ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(WifiP2pInfo info) {
InetAddress ownerAddress=info.groupOwnerAddress;
if (ownerAddress!=null) {
Log.d("MainActivity ",ownerAddress.toString());
ConnectAsyncTask asyncTask=new ConnectAsyncTask(MainActivity.this,ownerAddress,8888,enteredPin);
asyncTask.execute();
} else {
Toast.makeText(MainActivity.this, "Connection failed! Try again!", Toast.LENGTH_LONG).show();
}
}
});
@Override
public void onFailure(int reason) {
}
});
}
Да, вы абсолютно правы, это решило мою проблему. И именно там, в документации для Android WiFi P2P, я должен был сделать больше чтения. Большое спасибо. PS Я бы поднял ваш ответ, но у меня до сих пор нет репутации, я сделаю это, когда смогу .. – idzikovski