Android/WI-FI | Posted by 덩치 2013.08.05 16:15

Wifi상태 체크 + 자동 연결해제

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


WifiChecker.zip


WifiManager , WifiInfo 를 이용해 와이파이 상태를 체크하고

신호세기가 10Mbps 이하로 내려가면 자동으로 와이파이를 비활성화 시키는 예제입니다.

주석은 따로 없습니다. 궁금하신점은 댓글남겨주세요.


자동으로 다른 와이파이 검색해서 연결을 변경해주면 더 좋으련만

어떤 클래스나 메소드를 사용해서 할 수 있는지를 몰라 구현은 못했습니다.

아시는분은 댓글좀 남겨주세요 ㅎㅎ

구현하는법 알아냈습니다. 궁금하시면 댓글로 메일남겨주세요 

적용 예시 : http://biig.tistory.com/15

소스반영은 안했습니다. (2013.10.23 수정)




package com.example.wifichecker;



import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.net.wifi.WifiInfo;

import android.net.wifi.WifiManager;

import android.os.Bundle;

import android.os.Handler;

import android.widget.TextView;

import android.widget.Toast;


public class MainActivity extends Activity {

WifiManager wifiManager,wifiManager2;

WifiInfo wifiInfo,wifiInfo2;

TextView tv;

int speed;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView)findViewById(R.id.tv);

wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);

wifiInfo = wifiManager.getConnectionInfo();

IntentFilter filter = new IntentFilter();

filter.addAction(wifiManager.WIFI_STATE_CHANGED_ACTION);

registerReceiver(wifiReceiver,filter);

}


private BroadcastReceiver wifiReceiver = new BroadcastReceiver() {

public void onReceive(Context context, Intent intent) {

if(wifiManager.getWifiState()==3){

hd.post(callback);

hd2.postDelayed(callback2, 10000);

}else{

hd.removeCallbacks(callback);

tv.setText("Wifi가 비활성화 상태입니다.");

}

}

};


Handler hd2 = new Handler();

public Runnable callback2 = new Runnable(){

public void run(){

hd2.postDelayed(this, 5000);

if(speed<10){

hd.removeCallbacks(callback);

hd2.removeCallbacks(callback2);

wifiManager.setWifiEnabled(false);

Toast.makeText(MainActivity.this, "Wifi 연결이 종료되었습니다.", Toast.LENGTH_SHORT).show();

tv.setText("Wifi가 비활성화 상태입니다.");

}

}

};

Handler hd = new Handler();

public Runnable callback = new Runnable(){

public void run() {

if(wifiManager.getWifiState()==3){

wifiManager2 = (WifiManager)getSystemService(WIFI_SERVICE);

wifiInfo2 = wifiManager2.getConnectionInfo();

String id = wifiInfo2.getSSID();

speed = (wifiInfo2.getLinkSpeed());

double aa = speed+0.0;

double aaa = aa/8.0;

String num = String.format("%.2f" , aaa);

double latency = wifiManager2.WIFI_MODE_FULL_HIGH_PERF;

String num2 = String.format("%.2f", latency);

String view = "Wifi Id : "+wifiInfo2.getSSID()+"\n"+"\n"+"Speed : "+num+"MBps" + "\n" +"\n"+ "Power : " + 

String.valueOf(wifiInfo2.getRssi()+"dBm"+"\n"+"\n"+"Power : "+num2+"ms");

tv.setText(view);

hd.postDelayed(this, 3000);

}else{

tv.setText("Wifi가 비활성화 상태입니다.");

hd.removeCallbacks(callback);

}

}

};

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

hd.removeCallbacks(callback);

hd2.removeCallbacks(callback2);

}

}



댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 오르카 2014.05.26 16:31

    혹시 같은 내용을 동적 리시버가 아니라 정적 리시버로 작성할수도 있나요? 혹 가능하다면 예제를 요청해도 될런지요. 이런 내용은 찾기가 힘드네요 ㅎ

    •  댓글주소  수정/삭제 덩치 2014.05.26 17:24 신고

      http://cafe369.daum.net/_c21_/bbs_search_read?grpid=1MWA2&fldid=aAfL&datanum=102&contentval=&docid=1MWA2aAfL10220110915161750

      여기 참고해보세요.
      정적리시버를 사용해야하는 경우가 있으신건가요 ?
      동적리시버로 특정 액션만 받아서 사용하는게 좋다고생각합니다.

  2.  댓글주소  수정/삭제  댓글쓰기 메디치 2015.03.30 22:18

    죄송한데 getScanResuts의 level과 wifiinfo의 rssi 값의 차이점 혹시 알고 있으신가요??

  3.  댓글주소  수정/삭제  댓글쓰기 wifi검색 2015.05.12 11:51

    자동으로 다른 와이파이 연결 해주는 소스 좀 보내주실 수 있을까요 제가 마침 필요한 예제라서요

    show2544@naver.com
    입니다.

  4.  댓글주소  수정/삭제  댓글쓰기 안녕하세요 2015.05.15 14:39

    wifi 신호세기를 측정하고 가장 센 신호를 보내는 AP에 자동연결되는 예제를 찾고 있는데 도움이 될거 같습니다 예제좀 보내주시면 감사하겠습니다

    anonyy@naver.com

  5.  댓글주소  수정/삭제  댓글쓰기 네딕 2015.09.05 15:18

    안녕하세요 와이파이를 연결하는건 성공했는데 새로 연결후에 스캔하던동작을 멈춰서 이부분을 어떻게 처리했는지 알아보려고 합니다 연결하신 소스좀 보내 주시면 감사하겠습니다
    그리고 스피드가 10미만이면 와이파이를 종료하게하셨는데 RSSI로 하지않고 스피드로 하신 이유좀 알수있을까요?
    fruits_97@naver.com

  6.  댓글주소  수정/삭제  댓글쓰기 덩치님 밥좀사주세요 2015.10.05 17:46

    밥좀사주세요 ㅎ ㅡㅎ

  7.  댓글주소  수정/삭제  댓글쓰기 rain 2018.10.24 14:52

    안녕하세요.
    요즘 만들고 있는 앱에 적용하고 있는데
    자동으로 다른 와이파이를 연결 하는 파일을 받고 싶습니다.
    시간이 많이 지나 가능하실지 모르겠지만 부탁드립니다.
    micky4295@naver.com