WIFI 신호 감도, 속도, AP기기 맥 어드레스 가져오기

현재 접속한 wifi 의 신호 감도가 얼마 정도인지, 네트워크 속도는 얼마나 되는지 알고 싶고
같은 SSID라도 AP 기기가 다를 수 있는데 전환되었는지 알아 볼 때 AP 기기의 맥 어드레스로 알 수 있다.

manifests > AndroidManifest.xml 를 열어 퍼미션을 추가해 준다.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

그리고 아래 코드로 클래스 자바 파일에 넣어 활용한다.

신호감도는 퍼센테이지로 변환하여 노출하게 수정했다.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        registerReceiver(rssiReceiver, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION)); //신호 세기 체크
  }

private BroadcastReceiver rssiReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
      WifiManager wifiMan = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
      wifiMan.startScan();
      int linkspeed = wifiMan.getConnectionInfo().getLinkSpeed();
      int newRssi = wifiMan.getConnectionInfo().getRssi();
      int level = wifiMan.calculateSignalLevel(newRssi, 10);
      int percentage = (int) ((level/10.0)*100);
      String macAdd = wifiMan.getConnectionInfo().getBSSID();
      //debugtext.setText("링크 스피드 : " + linkspeed + " / 신호 감도 : " + percentage + " / 맥어드레스 : " + macAdd );
  }
};

@Override
public void onResume() {
  super.onResume();
  IntentFilter rssiFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
  this.registerReceiver(rssiReceiver, rssiFilter);
  WifiManager wifiMan = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
  wifiMan.startScan();
}   

@Override
protected void onDestroy(){
  super.onDestroy();
  unregisterReceiver(rssiReceiver);
}

 

TOP