본문 바로가기
안드로이드 자바

[JAVA][android] WiFi정보 스캔 빠르게 구현하기

by teamnova 2021. 6. 9.

안녕하세요.

안드로이드에서 WiFi정보 스캔하는 방법을 공유해보겠습니다!

 

자주 사용하는 코드는 스틱 코드에 등록하면 간편하게 불러와서 사용할 수 있습니다.

 

stickode.com/detail.html?no=2156

 

스틱코드

 

stickode.com

 

 

1. manifest 필요한 퍼미션 등록

2. 사용자 권한요청

3. wifi정보 스캔 코드

4. 테스트 결과

 

 

1. manifest 필요한 퍼미션 등록

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

위치정보와 wifi 상태를 확인할 수 있는 퍼미션 등록

 

2. 사용자 권한 요청

if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {

            Log.d("permission","checkSelfPermission");
            if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                    Manifest.permission.ACCESS_COARSE_LOCATION)) {

                Log.d("permission","shouldShowRequestPermissionRationale");
                // 사용자에게 설명을 보여줍니다.
                // 권한 요청을 다시 시도합니다.

            } else {
                // 권한요청

                Log.d("permission","권한 요청");
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
                                Manifest.permission.ACCESS_FINE_LOCATION,
                                Manifest.permission.ACCESS_WIFI_STATE,Manifest.permission.CHANGE_WIFI_STATE},
                        1000);

            }
        }

onCreate() 부분에 권한을 요청하는 코드 추가

 

//권한요청을 사용자에게 허락받았는지 못받았는지 결과를 알수 있는 콜백 메서드
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch (requestCode) {
            case 1000: {

                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // 권한 획득 성공
                    Log.d("permission","권한 획득 성공");

                } else {

                    // 권한 획득 실패
                    Log.d("permission","권한 획득 실패");
                }
                return;
            }

        }
    }

권한 요청 콜백 메서드를 main 액티비티에 추가하여

권한을 획득 성공했는지 확인할 수 있습니다.

 

 

권한요청 화면
권한요청 로그

3. wifi정보 스캔 코드

WifiManager wifiManager;

private void scanSuccess() {
  List<ScanResult> results = wifiManager.getScanResults();
  Log.e("wifi-info",results.toString());
  test_tv.setText(results.toString());
}

private void scanFailure() {
  // handle failure: new scan did NOT succeed
  // consider using old scan results: these are the OLD results!
  List<ScanResult> results = wifiManager.getScanResults();
}

onCreate() 메서드 윗부분에 wifiManager 변수 선언 및 스캔 결과를 확인하는 메서드 추가

 

BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context c, Intent intent) {
                boolean success = intent.getBooleanExtra(
                        WifiManager.EXTRA_RESULTS_UPDATED, false);
                if (success) {
                    scanSuccess();
                    Log.e("wifi","scanSuccess !!!!!!!!!!!!!!!");
                } else {
                    // scan failure handling
                    scanFailure();
                    Log.e("wifi","scanFailure ..............");
                }
            }
        };

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(wifiScanReceiver, intentFilter);


        wifi_scan_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean success = wifiManager.startScan();
                if (!success) {
                    // scan failure handling
                    scanFailure();
                    Log.e("wifi","scanFailure ..............");
                }
            }
        });

onCreate() 메서드에 wifi정보 상태 체크하는 코드 추가

 

 

4. 테스트 결과

왼쪽: 에뮬레이터 WiFi 정보 / 오른쪽: 앱에서 스캔한 WiFi 정보

앱에서 에뮬레이터의 WiFi 정보를 정상적으로 스캔할 것을 확인할 수 있습니다.

 

 

WiFi 정보 스캔 로그