すべてのAPのBSSID(MAC)を取得する必要があります。以下のコードブロックを見つけてください。
List<WifiConfiguration> test = wifiManager.getConfiguredNetworks();
for(int k=0;k<test.size();k++){
Log.d("acheck", "test BSSID = "+test.get(k).BSSID);
Log.d("acheck", "test BSSID = "+test.get(k).BSSID);
}
ただし、上記のコードブロックはSSIDを正しく返しますが、BSSIDの場合はnullを返します。ユーザー定義のSSIDで最強のアクセスポイントに接続したい。ユーザー定義のSSIDを使用して最高の信号強度のAPを取得するために使用できるAPIメソッドはありますか(私の場合、複数のAPを使用できる単一のSSIDを持つ多くのSSIDがあります)。
主にNPEを回避するために、@ ToonSuperLoveによる回答を採用しました。
public class WifiTest extends Activity {
public void loadWifiAvailableList(EditText etWifiList) {
WifiManager wifiManager = (WifiManager)
getSystemService(Context.WIFI_SERVICE);
List<ScanResult> results = wifiManager.getScanResults();
String message = "No results. Check wireless is on";
if (results != null) {
final int size = results.size();
if (size == 0) message = "No access points in range";
else {
ScanResult bestSignal = results.get(0);
etWifiList.setText(""); // etWifiList is EditText
int count = 1;
for (ScanResult result : results) {
etWifiList.append(count++ + ". " + result.SSID + " : "
+ result.level + "\n" + result.BSSID + "\n"
+ result.capabilities + "\n"
+ "\n=======================\n");
if (WifiManager.compareSignalLevel(bestSignal.level,
result.level) < 0) {
bestSignal = result;
}
}
message = String.format(
"%s networks found. %s is the strongest.", size,
bestSignal.SSID + " : " + bestSignal.level);
}
}
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
構成では、設定部分だけです(たとえば、user/pass/WPAまたはNULLblah blah)を尋ねるダイアログのように)
APからBSSIDを取得するには、ScanResultから取得する必要があります
public void loadWifiAvailableList() {
List<ScanResult> results = wifiManager.getScanResults();
ScanResult bestSignal = null;
etWifiList.setText(""); // etWifiList is EditText
int count = 1;
for (ScanResult result : results) {
etWifiList.append(count++ + ". " + result.SSID + " : " + result.level + "\n" +
result.BSSID + "\n" + result.capabilities + "\n" +
"\n=======================\n");
if (bestSignal == null || WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0)
{
bestSignal = result;
}
}
String message = String.format("%s networks found. %s is the strongest.",
results.size(), bestSignal.SSID + " : " + bestSignal.level);
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
現在接続されているWIFIネットワークのBSSIDを取得するには、WiFiInfoクラスを使用します。
WifiManager wifiMan = (WifiManager) context.getSystemService(
Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMan.getConnectionInfo();
String macAddr = wifiInfo.getMacAddress();
String bssid = wifiInfo.getBSSID();