这里给出一篇基本的wifi开发流程,希望对涉及到利用wifi进行网络传输的应用有一定帮助
1 AndroidManifest.xml中配置
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
2 获取wifi服务,并开启wifi
if (wifiManager == null)
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
3 注册wifi扫描监听器,并开始扫描
wifiNames = new ArrayList<String>();
wifiDevices = new ArrayList<WifiConfiguration>();
registerReceiver(wifiReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifiManager.startScan();
4 wifi扫描监听器
private final BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
List<WifiConfiguration> wcList = wifiManager
.getConfiguredNetworks();
WifiConfiguration wc = null;
wifiNames.clear();
wifiDevices.clear();
for (int i = 0, len = wcList.size(); i < len; i++) {
wc = wcList.get(i);
if (!wifiNames.contains(wc.SSID)) {
wifiNames.add(wc.SSID);
wifiDevices.add(wc);
}
}
};
5 获取到周围wifi列表后,让手机连上该wifi。(对wifi的连接我没有做具体的测试,希望对这段代码有问题的朋友可以给出评论)
WifiConfiguration wc = wifiDevices.get(index);
int resId = wifiManager.addNetwork(wc);
boolean isSucc = wifiManager.enableNetwork(resId, true);
isSucc = wifiManager.reassociate();
6 获取本机的IP地址,通过网上提供的一个方法获取,不过似乎不是十分的准确
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e(TAG, ex.toString());
}
return null;
}
7 连接到wifi后,通过本机IP地址便可以进行相关网络开发