Android: как получить результаты сканирования обнаружения ndsManager по имени в listView с помощью кнопок

Я настоящий Android-новичок с небольшим программированием на Java, так что терпите меня.

в настоящее время я предварительно загружаю String IPaddress="-"; и загрузить 2 asyncTasks;

1-й наблюдает за изменением "IP-адреса" и подключается к часам, чтобы получить настройки, в то время как customAlert показывает прогресс сканирования.

Второй использует nsdManager, чтобы найти, что имя mDNS содержит "fibonacci". обычно; fibonacciAB64.local, где AB64 - это последние 4 символа MAC-адреса, и обновляет "IP-адрес" после нахождения.

- При обнаружении получает настройки с часов и все работает. -

МОЯ ПРОБЛЕМА;
если их больше, чем на часах, я получаю только 1-й и мне нужно получить список для выбора в CustomALert.

если я отправлю, скажем, http://192.168.1.245/fl?n=1, часы мигнут 3 раза, чтобы идентифицировать, это будет кнопка "Тест". У
меня есть отправитель http ниже. на кнопке "Выбрать" будет обновлен IP-адрес.

Как я могу получить список найденных устройств в listView из ndsManager?
т.е.
"Тест", IP-адрес, "выберите",
"Тест" или имя, "выберите"

Являются ли gridList или Tableview лучший выбор?

Я знаю, что мне нужно изменить "где" я обновляю "IPaddress", это позже.

=========
Фрагменты кода с заменой ненужного кода на // комментирует то, что сделано
- такие вещи, как onDiscoveryStarted(), в которых только опубликованный журнал оставлены для свободного места

**in onCreate()**
new getSettingsFromClock().execute( GSFC_MAX );  // loop till detect good scan or timeout on 20 tries
mNsdManager = (NsdManager)(getApplicationContext().getSystemService(Context.NSD_SERVICE));
initializeResolveListener();
initializeDiscoveryListener();
mNsdManager.discoverServices( SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);

мой всплывающий customAlert, работает, но здесь полосатый

<code>
   ProgressBar  android:id="@+id/progressBar"
     style="?android:attr/progressBarStyleHorizontal"
   TextView     android:id="@+id/TextViewResult"
   listView  android:id="@+id/ScanListViewResult" ?????
</code>

.

 // make clock flash, to be called from test buttons
     private void flashClock( String IP ) {
        String  url = "http://" + IP + "/fl?n=1";
        MyHttpHandler flash = new MyHttpHandler();  // initiate http handler
        String return = flash.makeServiceCall(url); // Make a request to url and get response
      }
.

    // get JSON
    private  class getSettingsFromClock extends AsyncTask<Integer, Integer, String> {
      @Override
      protected void onPreExecute(){
        progressBar.setProgress(0);  // setup the progressBar
        progressBar.setMax(100);
      }

      @Override
      protected void onProgressUpdate(Integer... values){
        progressBar.setProgress( values[0]);
        String prgText = GSFC_COUNTER*5 + "/" + progressBar.getMax() ;
        progressText.setText( prgText );
      }

      @Override
      protected String doInBackground(Integer... params) {
        JSON_return = "";
        String ScanResult ="";
        String mlooper = IPaddress;
        GSFC_COUNTER = 0;
        while ( mlooper.equals("-") ) {
          mlooper = IPaddress;
          GSFC_COUNTER++;
          try {
             publishProgress( GSFC_COUNTER*5 );   //Updading progressBar here 
             Thread.sleep(400);
          } catch (InterruptedException e) {
             e.printStackTrace();
          }

          if (GSFC_COUNTER >= params[0])  //currently 20
          {
            // SCAN FAILED, post to Alert for user
            break;
          }
        }  //end while

        // JSON starts here
        if (JSON_return != null && GSFC_COUNTER < GSFC_MAX ) {  // MAX currently 20
                // Got JSON, load presets to main UI 
        } else {
           Log.i(TAG, "CLOCK_LOG Could Not get JSON from Clock.");
        }
        return ScanResult;
      }

      @Override
      protected void onPostExecute( String result){
        String title = getString(R.string.dialog_scanning_done);

        if( !"-".equals( IPaddress ) )  {
           toolbar.setSubtitle("Found Clock IP " + IPaddress);
        } else {
           toolbar.setSubtitle(Html.fromHtml("<font color='#FFBF00'>! Clock NOT Found !</font>"));
        }
        updateTextViewTitle.setText( title );
        ScanResultView.setText( result );
      }
    }  // end asyncTask class
    // END get JSON 

    // Network discovery
    private static class getIPtoTextView extends AsyncTask<Void, Void, Void> {
      @Override
      protected Void doInBackground(Void... params) {
      int NSD_MAX  = 10;         // max lops on discovery class
      String mloop = IPaddress;
      int counter = 0;
       while ( mloop.equals("-")   ) {
         mloop = IPaddress;
         try {  // waste some time
            Thread.sleep(400);
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
         counter++;
         if( counter >= 15  ) {  // break out if cannot find clock
            break;
         }
       } // end while
       return null;
     }

     @Override
     protected void onPostExecute(Void param) {
         Log.i( TAG, "NSD onPostExecute - IP Found? - " + IPaddress );
     }
    }  // END Network discovery asyncTask class

    private void initializeDiscoveryListener() {
      // Instantiate a new DiscoveryListener
      mDiscoveryListener = new NsdManager.DiscoveryListener() {

     //  Called as soon as service discovery begins.
      @Override
      public void onServiceFound(NsdServiceInfo service) {   // A service was found!
        String name = service.getServiceName();
        String type = service.getServiceType();

        if ( type.equals(SERVICE_TYPE) && name.contains("Fibonacci")) {    // ONLY return Clock
           Log.i(TAG, "CLOCK_LOG NDS Service discovery success: " + service);
           if(!resolveServiceRunning) {
               mNsdManager.resolveService(service, mResolveListener);
               resolveServiceRunning = true; 
            }
          }
        }

      @Override
      public void onStartDiscoveryFailed(String serviceType, int errorCode) {
         mNsdManager.stopServiceDiscovery(this);
      }
      @Override
      public void onStopDiscoveryFailed(String serviceType, int errorCode) {
         mNsdManager.stopServiceDiscovery(this);
      }
     };
    }

     private void initializeResolveListener() {
       mResolveListener = new NsdManager.ResolveListener(){

       @Override
       public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
          Log.i( TAG, "CLOCK_LOG NSD onResolveFailed() " + errorCode + "\n\n" );
        }

       @Override
       public void onServiceResolved( NsdServiceInfo serviceInfo ) {
         mServiceInfo = serviceInfo;
         InetAddress host = mServiceInfo.getHost();
         IPaddress = host.getHostAddress();

         try {
             mNsdManager.stopServiceDiscovery( mDiscoveryListener); // tearDown();
         } catch (Exception e) {
             e.printStackTrace();
         }
       }
     };
    }

0 ответов

Другие вопросы по тегам