마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

WiFi Scan List 불러오기에 대한 질문입니다.

0 추천

권한

<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 버전입니다

zenojm (2,840 포인트) 님이 2017년 10월 26일 질문
zenojm님이 2017년 10월 26일 수정
죄송한데 제가 할때 gps를 키지 않으면 wifi list가 아무것도 나오지 않는데... location에 대한 퍼미션은 명시적으로 받은 상태이고요. 혹시 해당 부분만 소스코드를 받을수있을까요...?

1개의 답변

0 추천
 
채택된 답변
receiver를 이용해서 wifi list 를 불러오네요.

searchWifi() 함 수 안에 wm.startScan() 호출 후 불러오면 바로 불러올수 있습니다.

receiver를 사용하지 않고 searchWifi() 함수만 온클릭안에 두면 되겟네요.
지나가는심심한개발자 님이 2017년 10월 27일 답변
zenojm님이 2017년 12월 18일 채택됨
...