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);
}
}