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();
}
}
};
}