펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO
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);
}
}
'Android > WI-FI' 카테고리의 다른 글
Wifi 주파수대역에 따른 채널값 구하는 방법 (3) | 2015.01.13 |
---|---|
연결된 Wifi의 IP Address 확인 (1) | 2014.01.08 |
Wifi를 검색하여 자동으로 연결하기 (2) | 2013.10.23 |
Wifi 목록 검색하는법 (1) | 2013.10.23 |
Wifi상태 체크 + 자동 연결해제 (9) | 2013.08.05 |
WifiManager를 이용한 와이파이 속도 테스트 (1) | 2013.08.01 |
댓글을 달아 주세요
혹시 같은 내용을 동적 리시버가 아니라 정적 리시버로 작성할수도 있나요? 혹 가능하다면 예제를 요청해도 될런지요. 이런 내용은 찾기가 힘드네요 ㅎ
http://cafe369.daum.net/_c21_/bbs_search_read?grpid=1MWA2&fldid=aAfL&datanum=102&contentval=&docid=1MWA2aAfL10220110915161750
여기 참고해보세요.
정적리시버를 사용해야하는 경우가 있으신건가요 ?
동적리시버로 특정 액션만 받아서 사용하는게 좋다고생각합니다.
죄송한데 getScanResuts의 level과 wifiinfo의 rssi 값의 차이점 혹시 알고 있으신가요??
ScanResult로 들어온 level은 스캔된 맥의 신호 세기이고,
wifiInfo의 rssi값은 연결되어 있는 wifi의 신호 세기입니다
자동으로 다른 와이파이 연결 해주는 소스 좀 보내주실 수 있을까요 제가 마침 필요한 예제라서요
show2544@naver.com
입니다.
wifi 신호세기를 측정하고 가장 센 신호를 보내는 AP에 자동연결되는 예제를 찾고 있는데 도움이 될거 같습니다 예제좀 보내주시면 감사하겠습니다
anonyy@naver.com
안녕하세요 와이파이를 연결하는건 성공했는데 새로 연결후에 스캔하던동작을 멈춰서 이부분을 어떻게 처리했는지 알아보려고 합니다 연결하신 소스좀 보내 주시면 감사하겠습니다
그리고 스피드가 10미만이면 와이파이를 종료하게하셨는데 RSSI로 하지않고 스피드로 하신 이유좀 알수있을까요?
fruits_97@naver.com
밥좀사주세요 ㅎ ㅡㅎ
안녕하세요.
요즘 만들고 있는 앱에 적용하고 있는데
자동으로 다른 와이파이를 연결 하는 파일을 받고 싶습니다.
시간이 많이 지나 가능하실지 모르겠지만 부탁드립니다.
micky4295@naver.com