2014-08-28 4 views
1

Я использую класс WifiP2pManager инициировать открытие пэров, как указано здесь: http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.htmlWifiP2pManager discoverPeers ActionListener возвращает Busy

Часть кода идет следующим образом:

//Activity Class 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ... 
    mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); 
    mChannel = mManager.initialize(this, getMainLooper(), null); 

    //Separate class here 
    mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this);   

    //register the events to filter on to perform the broadcast receiver 
    mIntentFilter = new IntentFilter(); 

    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); 
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); 
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); 
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); 

    mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() { 
     @Override 
     public void onSuccess() {     
      myTextView.setText("Success discovery"); 
     } 

     @Override 
     public void onFailure(int reasonCode) { 
      myTextView.setText("Discovery errorcode:" + String.valueOf(reasonCode)); 
     } 
    }); 

} 

Бывает, что я получаю onSuccess вызов в моем телефоне (на основе JellyBean), но планшет Lenovo A2107A, используемый для тестирования под управлением Android 4.1.2. Сэндвич IceCream просто получает onFailure, где reasonCode равен 2 (занят): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ActionListener.html

Я заметил, что в настройках Wifi телефона отображается список параметров открытия WifiDirect, но в планшете нет возможности сделать это, хотя OS версии 4.x якобы поддерживает его, по крайней мере программно (я протестировал ShareIt Приложение и планшет могут передавать файлы через WiFi).

Аналогичный вопрос был задан здесь: Why do I always get BUSY when using WifiP2pManager? но без принятого ответа.

Есть ли что-нибудь, что я могу сделать, чтобы избежать всегда занятого состояния при использовании этого метода API на планшете ?. Благодаря!

ответ

1

Видимо Lenovo A2107A таблетки возвращение «Занято» состояния после вызова экземпляра WifiP2pManager по его методе discoveryPeers, не поддерживает Wi-Fi Direct/WiFi P2P, на самом деле там нет возможности для поиска для P2P сверстников на нем, следовательно, возвращении статус StatusCode 2 Busy в обратном вызове onFailure, даже работает под управлением Android 4.1.2, что теоретически поддерживает WifiDirect, что немного странно.

Несколько полезных проектов, чтобы лучше понять внутреннюю работу этой технологии здесь:

https://github.com/ahmontero/wifi-direct-demo

https://github.com/mayfourth/WiFi-Direct-File-Transfer

1

Пожалуйста, убедитесь, что Wi-Fi включен, прежде чем discoveryPeers называется. У меня БИЗНЕС, когда Wi-Fi отключен; и успех, когда Wifi включен.

+0

Этот разрешенный шахта – Vishnu