WIFI是一種無線連網技術
要使用WIFI串連網路,首先需要設定作業WIFI網路所需的許可權,一般將下面四個許可權同時擷取
CHANGE_NETWORK_STATE |
Allows applications to change network connectivity state |
CHANGE_WIFI_STATE |
Allows applications to change Wi-Fi connectivity state |
ACCESS_NETWORK_STATE |
Allows applications to access information about networks |
ACCESS_WIFI_STATE |
Allows applications to access information about Wi-Fi networks |
擷取WIFI網卡的狀態
類似於WIFI這樣的系統級服務管理對象,通常都需要調用Context對象的getSystemService()方法來擷取,這個方法接收一個字串作為參數,根據參數的不同,得到不同的系統服務管理對象。管理WIFI網卡的對象叫做WifiManager,得到這個對象的方法如下:
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
對於WifiManager來說,經常使用的有如下操作:
得到當前網卡狀態:
int wifiState = wifiManger.getWifiState();
這個函數返回的是一個整形,不同的傳回值代表著不同的狀態,每一種狀態都對應著一個常量,這些常量都存放在WifiManager類當中,具體含義如下:
WIFI_STATE_DISABLED:WIFI網卡不可用
WIFI_STATE_DISABLING:WIFI正在關閉
WIFI_STATE_ENABLED:WIFI網卡可用
WIFI_STATE_ENABLING:WIFI網卡正在開啟
WIFI_STATE_UNKNOWN:未知網卡狀態
需要注意的是WIFI網卡的開啟和關閉並不是瞬間的過程,需要一段時間。也就是說如果當前我們手機的網卡處於可用的狀態,我們關閉網卡之後,並不是馬上進入關閉狀態,而是處於正在關閉狀態,等關閉的動作完成以後才會真正進入到關閉狀態!
修改當前網卡狀態
得到WifiManager對象之後,就可以修改WIFI網卡狀態了,具體方法如下:
開啟WIFI網卡
wifiManger.setWifiEnabled(true);
關閉WIFI網卡
wifiManger.setWifiEnabled(false);
下面給出一個簡單的程式碼:
1、manifest中設定許可權
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="mars.wifi" android:versionCode="1" android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".WifiActivity" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-sdk android:minSdkVersion="4" /><!-- 以下是使用wifi訪問網路所需要的許可權 --><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></manifest>
在WifiActivity.java中設定WIFI網卡狀態
package mars.wifi;import android.app.Activity;import android.content.Context;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.Toast;public class WifiActivity extends Activity { /** Called when the activity is first created. */private Button startButton = null;private Button stopButton = null;private Button checkButton = null;private WifiManager wifiManager = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startButton = (Button)findViewById(R.id.startWifi); stopButton = (Button)findViewById(R.id.stopWifi); checkButton = (Button)findViewById(R.id.checkWifi); startButton.setOnClickListener(new StartWifiListener()); stopButton.setOnClickListener(new StopWifiListener()); checkButton.setOnClickListener(new CheckWifiListener()); } class StartWifiListener implements OnClickListener{@Overridepublic void onClick(View v) {wifiManager = (WifiManager)WifiActivity.this.getSystemService(Context.WIFI_SERVICE);//設定狀態可用wifiManager.setWifiEnabled(true);System.out.println("wifi state --->" + wifiManager.getWifiState());Toast.makeText(WifiActivity.this, "當前Wifi網卡狀態為" + wifiManager.getWifiState(), Toast.LENGTH_SHORT).show();} } class StopWifiListener implements OnClickListener{@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubwifiManager = (WifiManager)WifiActivity.this.getSystemService(Context.WIFI_SERVICE);//設定狀態不可用wifiManager.setWifiEnabled(false);System.out.println("wifi state --->" + wifiManager.getWifiState());Toast.makeText(WifiActivity.this, "當前Wifi網卡狀態為" + wifiManager.getWifiState(), Toast.LENGTH_SHORT).show();} } class CheckWifiListener implements OnClickListener{@Overridepublic void onClick(View v) {wifiManager = (WifiManager)WifiActivity.this.getSystemService(Context.WIFI_SERVICE);System.out.println("wifi state --->" + wifiManager.getWifiState());Toast.makeText(WifiActivity.this, "當前Wifi網卡狀態為" + wifiManager.getWifiState(), Toast.LENGTH_SHORT).show();} }}