'WifiInfo'에 해당되는 글 2

  1. 2013.08.05 Wifi상태 체크 + 자동 연결해제 9
  2. 2013.08.01 WifiManager를 이용한 와이파이 속도 테스트 1
Android/WI-FI | Posted by 덩치 2013. 8. 5. 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);

}

}



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


Wificheck.zip


와이파이가 연결되어있다는 가정하에 만들었습니다.

연결안되어도 에러는 나지 않습니다. 와이파이 연결 후 속도측정용입니다.


공부할겸 만든거라 WifiInfo를 이용해 띄운 와이파이 명 , WifiManager를 이용해 띄운 속도 밖에 없습니다.


주석은 안달려있으니 궁금하신점은 댓글로 남겨주세요



매니패스트 퍼미션은


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

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


두줄 추가입니다



package com.example.wificheck;



import android.app.Activity;

import android.net.wifi.WifiInfo;

import android.net.wifi.WifiManager;

import android.os.Bundle;

import android.os.Handler;

import android.util.Log;

import android.view.Menu;

import android.widget.TextView;


public class MainActivity extends Activity {

WifiManager wifiManager,wifiManager2;

TextView tv;

WifiInfo wifi,wifi2;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

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

wifiManager2 = (WifiManager)getSystemService(WIFI_SERVICE);

wifi2 = wifiManager2.getConnectionInfo();

handler.post(callback);

}

Handler handler = new Handler();

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}


public Runnable callback = new Runnable(){

@Override

public void run() {

Boolean bool = wifiManager2.isWifiEnabled();

// TODO Auto-generated method stub

handler.postDelayed(callback, 1000);

wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);

wifi = wifiManager.getConnectionInfo();

String wifiinfo = WifiInfo.LINK_SPEED_UNITS;

int speed = wifi.getLinkSpeed();

String name = wifi.getSSID();

String TEXT = "Wifi Name : "+name+"\n"+"Speed : "+ String.valueOf(speed)+" "+wifiinfo;

tv.setText(TEXT);

}

};

}