권한
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
전역변수
ScanResult scanResult;
WifiManager wm;
List<ScanResult> apList = new ArrayList<ScanResult>();
onCreate() 부분
//WiFi Scan List 불러오기
wm = (WifiManager) getSystemService(WIFI_SERVICE);
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(wifiReceiver, filter);
브로드캐스트 리시버
//WiFi List 불러오기를 위한 BroadcastReceiver
private BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
searchWifi();
}
}
};
public void searchWifi() {
apList = wm.getScanResults(); //WiFi Scan 결과 - Return List
if (wm.getScanResults() != null) {
int size = apList.size();
for (int i = 0; i < size; i++) {
scanResult = (ScanResult) apList.get(i);
}
}
}
WiFi Scan List를 쓰는 곳
if (apList.size() == 0) {
} else { //WiFi Scan List 콤보박스 생성
et_WiFiSSID.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(MainActivity.this);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.select_dialog_singlechoice);
adapter.add("직접 입력"); //0번째 인덱스에 "직접 입력"을 넣는다.
for (int i = 0; i < apList.size(); i++) { //WiFi Scan List의 목록을 콤보박스 어댑터에 추가한다.
adapter.add(apList.get(i).SSID);
}
이런 식으로 쓰고 있습니다. 시작 시, 바로 쓰지 않고 버튼 클릭 시, apList에 저장된 wifi 정보를 끌어오는데
처음 시도할 때 바로 WiFi List가 뜨지 않고, 시간이 좀 흐른 후에 WiFi List가 뜹니다.
시작 시 바로 WiFi List를 불러와도 꼭 일정시간이 지난 후에야 리스트를 볼 수 있는건가요??
ps. Android 6.0.1 버전입니다