현재 접속한 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); }