주변의 Wifi AP를 검색하고 그에대한
BSSID( MAC ADDR)
SSID
Capabilitiies(암호화)
Frequency
Signal Level
을 보여주는 간단한 APP이다.
소스는 '커니의 안드로이드 2판'을 참고하였다.
간단하게 원리를 정리하자면,
Wifi 검색은 WifiManager Class를 이용하여 Wifi service의 context를 얻고
wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); //인스턴스 get
그 값을 이용해서 주변 wifi를 getScanResults 매서드를 이용해서 스캔한다.
scanResult = wifiManager.getScanResults();
그리고 스캔값들을 HashMap에 저장하여(이부분은 개발자가 편한대로..) 리스트에 출력한다.
HashMap<String,String> item = new HashMap<String,String>();
item.put("bssid","BSSID : " + result.BSSID);
item.put("ssid","SSID : " + result.SSID);
item.put("capabilities","Capablities : " + result.capabilities);
item.put("freq","Freq : " + result.frequency);
item.put("level","Signal Level : " + result.level);
list.add(item);
부가적으로 Device가 Wifi가 사용 가능한지 체크를 하기 위해서
ConnectivityManager Class를 이용하여 Connectivity sevice의 context를 얻고
connManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); //인스턴스 get
NetworkInfo clas를 이용하여 Wifi모듈의 NextworkInfo를 얻어와서 모듈이 작동중인지 체크를 할 수 있다.
NetworkInfo wifiInfo =
connManager.getNetworkInfo( ConnectivityManager.TYPE_WIFI); //wifi 타입의 정보를 얻오온다.
참고. ConnectivityManager에서는 아래와 같은 여러가지 모듈의 상태값을 받아올 수 있다.( 블루투스,wifi,wimax(==wibro) 등 )
menifest permission은 아래의 두가지가 필요하다.
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
xml과 manifest는 아래의 압축파일을 참고
package com.example.searchwifi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends ListActivity {
//private
private WifiManager wifiManager;
private ConnectivityManager connManager;
private List<ScanResult> scanResult;
private SimpleAdapter adapter;
private ArrayList< HashMap<String,String> > list;
private Button btnRefresh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = new ArrayList< HashMap<String,String> >();
wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); //인스턴스 get
connManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); //인스턴스 get
NetworkInfo wifiInfo =
connManager.getNetworkInfo( ConnectivityManager.TYPE_WIFI); //wifi 타입의 정보를 얻오온다.
if(wifiInfo.isAvailable())
refresh();
else
Toast.makeText(getApplicationContext() , "wifi 사용불가", Toast.LENGTH_LONG).show();
btnRefresh = (Button)findViewById(R.id.btnRefresh);
btnRefresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
refresh();
}
});
}
@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;
}
private void refresh() {
scanResult = wifiManager.getScanResults();
list.clear();
for(ScanResult result: scanResult) {
HashMap<String,String> item = new HashMap<String,String>();
item.put("bssid","BSSID : " + result.BSSID);
item.put("ssid","SSID : " + result.SSID);
item.put("capabilities","Capablities : " + result.capabilities);
item.put("freq","Freq : " + result.frequency);
item.put("level","Signal Level : " + result.level);
list.add(item);
}
String[] from = new String[] {
"bssid",
"ssid",
"capabilities",
"freq",
"level"
};
int[] to = new int[] {
R.id.bssid,
R.id.ssid,
R.id.capabilities,
R.id.Freq,
R.id.level
};
adapter = new SimpleAdapter( this, list, R.layout.row, from, to);
setListAdapter(adapter);
}
}
'소프트웨어 > Android/Java/Ndk' 카테고리의 다른 글
Android] ListActivity에서 OnClickListener 적용시키기 (0) | 2013.11.03 |
---|---|
Android] WifiManager 업데이트( .startScan()) (0) | 2013.11.03 |
Android] Handler사용법 (0) | 2013.11.03 |
안드로이드] 액션바 (0) | 2013.09.27 |
안드로이드] 저장소 경로 얻을시 emulater/0 해결법 (0) | 2013.09.27 |
안드로이드] 안드로이드 외부저장소 쓰기 권한 (0) | 2013.09.27 |
wifi direct관련 문서 (0) | 2013.09.08 |