2015-09-01 6 views
0

Мне нужно использовать для моего приложения WiFi Direct, и я нашел Демо Google, но ему нужно много и много изменений. Первая проблема, с которой я столкнулся, заключается в том, что я не могу сделать автоматическое сканирование приложений для устройств, потому что есть фрагменты повсюду и каждый раз, когда я пытаюсь создать бесконечный цикл с Runnable и поместить этот цикл во второй поток, так что поток пользовательского интерфейса может быть свободным для запуска его сбоев. Можете ли вы указать мои ошибки и помочь мне удалить кнопку сканирования?Google Direct WiFi Demo удаляет кнопку обнаружения

Код, который я считаю, включает в себя кнопку является ниже:

case R.id.atn_direct_discover: 
       if (!isWifiP2pEnabled) { 
        Toast.makeText(WiFiDirectActivity.this, R.string.p2p_off_warning, 
          Toast.LENGTH_SHORT).show(); 
        return true; 
       } 

       final DeviceListFragment fragment = (DeviceListFragment) getFragmentManager() 
         .findFragmentById(R.id.frag_list); 

       fragment.onInitiateDiscovery(); 
       manager.discoverPeers(channel, new WifiP2pManager.ActionListener() { 

        @Override 
        public void onSuccess() { 
         Toast.makeText(WiFiDirectActivity.this, "Discovery Initiated", 
           Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onFailure(int reasonCode) { 
         Toast.makeText(WiFiDirectActivity.this, "Discovery Failed : " + reasonCode, 
           Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       return true; 

И здесь также:

public void onInitiateDiscovery() { 
         if (progressDialog != null && progressDialog.isShowing()) { 
          progressDialog.dismiss(); 
         } 
     progressDialog = ProgressDialog.show(getActivity(), "Press back to cancel", "finding peers", true, 
       true, new DialogInterface.OnCancelListener() { 

        @Override 
        public void onCancel(DialogInterface dialog) { 

        } 
       }); 
    } 

Я пробовал много вещей, но я думаю, что я очень близко с чем-то вроде это:

Runnable myRunnable = new Runnable() { 
     @Override 
     public void run() { 
      while (testByte == 0) { 
       try { 

        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
       } 

         myRunnable = new Runnable() { 
         @Override 
         public void run() { 
         final DeviceListFragment fragment = (DeviceListFragment) getFragmentManager() 
           .findFragmentById(R.id.frag_list); 

         fragment.onInitiateDiscovery(); 
         manager.discoverPeers(channel, new WifiP2pManager.ActionListener() { 

          @Override 
          public void onSuccess() { 
           Toast.makeText(WiFiDirectActivity.this, "Discovery Initiated", 
             Toast.LENGTH_SHORT).show(); 
          } 

          @Override 
          public void onFailure(int reasonCode) { 
           Toast.makeText(WiFiDirectActivity.this, "Discovery Failed : " + reasonCode, 
             Toast.LENGTH_SHORT).show(); 
          } 
         }); 
        } 
       }); 
      } 
     } 

, а затем добавить:

Thread myThread = new Thread(myRunnable); 
myThread.start(); 

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

+0

Итак, чтобы получить это право, вы хотите получить ребро кнопки открытия и создать бесконечный цикл, чтобы приложение могло автоматически сканировать? – zETO

+0

Да, это именно то, что я пытаюсь сделать, если вы хотите посмотреть здесь весь демо-код google: [Демо Google] (https://github.com/ahmontero/wifi-direct-demo/tree/master/src/com/example/android/wifidirect) –

ответ

1

Я бы угробить код, и заново спроектировать класс для выполнения открытия , В основном то, что вам нужно сделать, это реализовать широковещательный приемник, чтобы знать, когда разные вещи, например:

  • WIFI_P2P_PEERS_CHANGED_ACTION говорит вам, что вглядывается информацией обнаружения для коллег вокруг вас изменились
  • WIFI_P2P_DISCOVERY_CHANGED_ACTION говорит вам, что открытие пэра состояние изменилось

Так что, если вы хотите открыть для себя только сверстников, то в начале просто называют discoverPeers, и после того, как WIFI_P2P_DISCOVERY_CHANGED_ACTION называется, увидеть, если его выключить и снова позвонить discoverPeers.

И как только вы получаете WIFI_P2P_PEERS_CHANGED_ACTION, просто вызывайте requestPeers, чтобы получить список сверстников.

После этого, конечно, если вы также хотите открыть Службы на этих одноранговых узлах, вам потребуется немного изменить логику, в любом случае, примерный код примера довольно логично иллюстрирует логику.

+0

Я проверю ваш образец и получаю некоторую помощь оттуда, спасибо –