闲来无事,研究一下Android的wifi模块。
涉及到的类:
*1.WifiManager:管理wifi连接的service,可由getSystemService(Context.WIFI_SERVICE)获取*
*2.ScanResult:包含wifi的SSID、BSSID、level等信息*
写了一个比较简单的查看wifi信息的apk,源码如下:
Activity源代码
package com.jaden.mywifi;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MyWifi extends Activity implements OnClickListener{
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private TextView tv1;
private StringBuffer sb = new StringBuffer();
private List<ScanResult> srList;
private WifiManager mWifiManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_wifi);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
btn4 = (Button) findViewById(R.id.btn4);
tv1 = (TextView) findViewById(R.id.tv1);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
initService(MyWifi.this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
//扫描附近wifi
case R.id.btn1:
scanWifi();
showList();
break;
//打开wifi
case R.id.btn2:
openWifi();
break;
//关闭wifi
case R.id.btn3:
closeWifi();
break;
//显示当前wifi状态
case R.id.btn4:
Toast.makeText(this, checkWifi() , Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
//获得wifiManager的service实例
private void initService(Context context){
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
//扫描可用wifi,返回一个scanResult的List
private void scanWifi(){
mWifiManager.startScan();
if(mWifiManager.isWifiEnabled()){
srList = mWifiManager.getScanResults();
}
}
//如果wifi没有打开,打开wifi
private void openWifi(){
if(!mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(true);
}
}
//如果wifi打开,关闭wifi
private void closeWifi(){
if(mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(false);
}
}
//获得wifi状态,返回String字符串
private String checkWifi(){
String state = "";
switch (mWifiManager.getWifiState()) {
case 1:
state = "。。。未连接。。。";
break;
case 2:
state = "正在断开连接。。。";
break;
case 3:
state = "。。。已连接。。。";
break;
case 4:
state = "正在连接。。。。。";
break;
case 5:
state = "。。未知连接。。。";
break;
default:
break;
}
return state;
}
//把扫描到的可用wifi显示在TestView
private void showList(){
if(sb != null){
sb = new StringBuffer();
}
sb.append(" 可连接的wifi:\n");
for (int i = 0; i < srList.size(); i++) {
ScanResult sr = srList.get(i);
sb.append(" ").append(sr.SSID).append("\n");
}
tv1.setText(sb);
}
}
xml布局代码
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="扫描wifi"
android:id="@+id/btn1" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="打开wifi"
android:id="@+id/btn2" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="关闭wifi"
android:id="@+id/btn3" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="网络状态"
android:id="@+id/btn4" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/tv1"/>
</LinearLayout>
</ScrollView>
一定要记得在AndroidManifest加入权限
<!-- 以下是使用wifi访问网络所需的权限,本例只有wifi权限 -->
<!--uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission-->
<!--uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
效果图如下:
以上是wifi在Android上层的简单代码演示。。。