Я пытаюсь подключить два Android-устройства с помощью Wi-Fi Direct.
На моем HTC-Phone (One SV) это работает, но на моем втором устройстве LG Optimus 4xhd это не работает.
В моей функции onResume() я запускаю следующий поток:
new Thread(){
private int count=0;
public void run()
{
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(tag,"SUCCESS - started discovering peers");
}
@Override
public void onFailure(int reason) {
count++;
String err=new String();
if(reason==WifiP2pManager.BUSY) err="BUSY";
if(reason==WifiP2pManager.ERROR)err="ERROR";
if(reason==WifiP2pManager.P2P_UNSUPPORTED) err="P2P_UNSUPPORTED";
Log.d(tag,"FAIL - couldnt start to discover peers code: "+err+" ("+count+")");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(count>=20)return;
mManager.discoverPeers(mChannel, this);
}
});
}
}.start();
Как я уже говорил: это прекрасно работает на моем HTC. Но с LG я просто получаю «НЕУДАЧА - не удалось обнаружить код пиров: ЗАНЯТО» (20 раз).
Я также попробовал WifiP2pManager.createGroup() с тем же результатом.
Еще я понял, что мой BroadcastReceiver со следующими фильтрами ничего не получает на моем LG (HTC получает некоторые трансляции). Фильтры:
filter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
// Indicates a change in the list of available peers.
filter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
// Indicates the state of Wi-Fi P2P connectivity has changed.
filter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
// Indicates this device's details have changed.
filter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
Я не пробую никаких причудливых вещей. Я просто следую руководствам по API для Wi-Fi Direct на http://developer.android.com/guide/topics/connectivity/wifip2p.html
Могу ли я что-нибудь сделать? Я не могу понять, почему LG-Phone должен работать по-другому.
Просто чтобы убедиться в одном: в моем onCreate() я получаю и инициирую свой менеджер следующим образом:
mManager = (WifiP2pManager) getSystemService(MainActivity.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), receiver);
И вроде работает на обоих устройствах. (Я возвращаю канал)