Как я могу получить результаты сканирования Android Wifi в список?
Автор вопроса: Seth HikariОтветов: 5
Я знаю, как получить <List> сканирования Wi-Fi Android, но я не могу найти лучший способ сделать из них адаптер списка. Я хотел бы просто привязать SSID и BSSID из <List> сканирований к text1 и text2.
Примеры того, что я делал
wifi.startScan();
// get list of the results in object format ( like an array )
List<ScanResult> results = wifi.getScanResults();`
// loop that goes through list
for (ScanResult result : results) {
Toast.makeText(this, result.SSID + " " + result.level,
Toast.LENGTH_SHORT).show();
А также:
private void fillDataFromDb() {
Cursor scanCursor = Db.fetchAllScans();
startManagingCursor(scanCursor);`
// Create an array to specify the fields we want to display in the list
// (only TITLE)
String[] from = new String[] { WifiDbAdapter.KEY_BSSID,
WifiDbAdapter.KEY_SSID };
// and an array of the fields we want to bind those fields to (in this
// case just text1)
int[] to = new int[] { R.id.text1, R.id.text2 };
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter scansdb = new SimpleCursorAdapter(this,
R.layout.scan_row, scanCursor, from, to);
setListAdapter(scansdb);
}
Я хотел бы увидеть код, который у вас тоже есть. Вы получаете такие результаты?: List‹ScanResult› results = wifi.getScanResults(); eternalmatt 28.03.2011
Я уже делаю это, чтобы просто получать всплывающие сообщения: wifi.startScan(); // get list of the results in object format ( like an array ) List<ScanResult> results = wifi.getScanResults(); // loop that goes through list for (ScanResult result : results) { Toast.makeText(this, result.SSID + " " + result.level, Toast.LENGTH_SHORT).show(); Seth Hikari 28.03.2011
@eternalmatt Да, именно так я получаю результаты, и это прекрасно работает, просто не знаю, как привязать это к списку. Seth Hikari 28.03.2011
Оберните ArrayAdapter вокруг List<ScanResult>. Переопределите getView(), чтобы заполнить ваши строки данными ScanResult. Вот бесплатный отрывок из одной из моих книг, в котором рассказывается, как создавать подобные ArrayAdapters собственные.
Ответ 4 · рейтинг 4 · antman
Найдите полный рабочий пример ниже:
Код @Android очень хорош, но имеет несколько проблем, а именно:
Заполнение кода ListView необходимо переместить в onReceive of BroadCastReceiver, где будет доступен только результат. В случае, если результат получен со 2-й попытки.
После получения результатов необходимо отменить регистрацию BroadCastReceiver.
size = size -1 кажется ненужным.
Найдите ниже модифицированный код @Android в качестве рабочего примера:
WifiScanner.java, который является основным действием
package com.arjunandroid.wifiscanner;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class WifiScanner extends Activity implements View.OnClickListener{
WifiManager wifi;
ListView lv;
Button buttonScan;
int size = 0;
List<ScanResult> results;
String ITEM_KEY = "key";
ArrayList<String> arraylist = new ArrayList<>();
ArrayAdapter adapter;
/* Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getActionBar().setTitle("Widhwan Setup Wizard");
setContentView(R.layout.activity_wifi_scanner);
buttonScan = (Button) findViewById(R.id.scan);
buttonScan.setOnClickListener(this);
lv = (ListView)findViewById(R.id.wifilist);
wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifi.isWifiEnabled() == false)
{
Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show();
wifi.setWifiEnabled(true);
}
this.adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,arraylist);
lv.setAdapter(this.adapter);
scanWifiNetworks();
}
public void onClick(View view)
{
scanWifiNetworks();
}
private void scanWifiNetworks(){
arraylist.clear();
registerReceiver(wifi_receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifi.startScan();
Log.d("WifScanner", "scanWifiNetworks");
Toast.makeText(this, "Scanning....", Toast.LENGTH_SHORT).show();
}
BroadcastReceiver wifi_receiver= new BroadcastReceiver()
{
@Override
public void onReceive(Context c, Intent intent)
{
Log.d("WifScanner", "onReceive");
results = wifi.getScanResults();
size = results.size();
unregisterReceiver(this);
try
{
while (size >= 0)
{
size--;
arraylist.add(results.get(size).SSID);
adapter.notifyDataSetChanged();
}
}
catch (Exception e)
{
Log.w("WifScanner", "Exception: "+e);
}
}
};
}
activity_wifi_scanner.xml, который является файлом макета для действия.