android - 使用可用的 wifi 地址填充微调器

标签 android spinner android-arrayadapter android-spinner

我正在努力让微调器显示可用的 wifi SSID 列表。我使用以下内容将 SSID 存储到广播接收器的 onReceive 中的字符串数组中。

List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
        wifis = new String[wifiScanList.size()];
        for (int i = 0; i < wifiScanList.size(); i++) {
            wifis[i] = ((wifiScanList.get(i).SSID));
        }

然后我如何将 wifis 数组显示到我的微调器?我的 xml 中有微调器对象,在我的 onCreate 中有

sp = (Spinner) findViewById(R.id.spinner);

在我的广播接收器中,我尝试这样做......

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
wifis, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

但是由于我的数组不是资源,所以它不起作用。我一直在寻找其他方法来做到这一点,但我遇到的只是如何从 xml 文件访问字符串。

所以我的问题是,我如何使用我现有的代码然后用我的 wifi 选择列表填充微调器。感谢您的任何帮助。

编辑:完整代码现在可以运行了:

public class MainActivity extends Activity {

WifiManager mainWifiObj;
WifiScanReceiver wifiReciever;
ListView list;
Spinner sp;
String wifis[];

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sp = (Spinner) findViewById(R.id.spinner);
    mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    wifiReciever = new WifiScanReceiver();
    mainWifiObj.startScan();
}

protected void onPause() {
    unregisterReceiver(wifiReciever);
    super.onPause();
}

protected void onResume() {
    registerReceiver(wifiReciever, new IntentFilter(
            WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    super.onResume();
}

class WifiScanReceiver extends BroadcastReceiver {
    @SuppressLint("UseValueOf")
    public void onReceive(Context c, Intent intent) {
        List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
        wifis = new String[wifiScanList.size()];
        for (int i = 0; i < wifiScanList.size(); i++) {
            wifis[i] = ((wifiScanList.get(i).SSID));
        }

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, wifis);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adapter);
    }
}
}

最佳答案

尝试以下操作:

List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
    wifis = new ArrayList<String>();
    for (int i = 0; i < wifiScanList.size(); i++) {
        wifis.add(((wifiScanList.get(i).SSID)));
    }

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, wifis);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

关于android - 使用可用的 wifi 地址填充微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24315356/

相关文章:

java - 如果在多个 EditText 中有输入,如何更改 TextView?

android - Android 中的 OpenStreetMap

android - 将冒号添加到 InputType.TYPE_CLASS_NUMBER 键盘

android - Android 应用程序中的两个微调器

android - 带有自定义 ArrayAdapter(和 getView 回收)的 ListViewText 中用于 EditText 的 TextWatcher

java - 当适配器中的项目被删除时刷新 ListView

android - 如何从 firebase 中删除条目

unit-testing - 如何在命令行中禁用新的 NPM 微调器?

Android Spinner 对于 "drop down state"和 "closed state"有不同的布局?

java - Android ArrayAdapter 缓慢滚动