當你想要在你的應用程式裡面幫使用者開啟Wifi或熱點時
需要以下幾個步驟方可幫使用者開啟
步驟一:
要先到Manifest.xml中加入權限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
這裡我是將可能會用到的權限全部加入!
步驟二:
在使用Wifi控制之前要先加入WifiManager才能開始申請控制Wifi:
public WifiManager mWifiManager;
private WifiInfo mWifiInfo;
mWifiManager = (WifiManager) "你的Activity".this.getSystemService(context.WIFI_SERVICE);
接著就可以開始做你想要做的事情囉!
將Wifi開啟:
mWifiManager.setWifiEnabled(true);
將wifi關閉:
mWifiManager.setWifiEnabled(false);
檢查Wifi是否打開:
public boolean isWifiOn(){ if(mWifiManager.isWifiEnabled()){ Log.i(TAG,"Wifi is already On."); return true; }else { Log.i(TAG,"Wifi is already Off."); return false; } }
檢查熱點是否打開:
public boolean isWifiHotSpotOn() { try { Method method = mWifiManager.getClass().getDeclaredMethod("isWifiApEnabled"); method.setAccessible(true); return (Boolean) method.invoke(mWifiManager); } catch (Throwable ignored) {} return false; }
熱點切換開/關:
public boolean switchApState() { try { WifiConfiguration wificonfiguration = null; // if WiFi is on, turn it off if(isWifiOn()) { mWifiManager.setWifiEnabled(false); } Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); method.invoke(mWifiManager, wificonfiguration, !isWifiHotSpotOn()); return true; } catch (Exception e) { e.printStackTrace(); } return false; }
設定熱點名稱為newName:
public boolean setHotspotName(String newName) { try { Method getConfigMethod = mWifiManager.getClass().getMethod("getWifiApConfiguration"); WifiConfiguration wifiConfig = (WifiConfiguration) getConfigMethod.invoke(mWifiManager); wifiConfig.allowedAuthAlgorithms.clear(); wifiConfig.allowedGroupCiphers.clear(); wifiConfig.allowedKeyManagement.clear(); wifiConfig.allowedPairwiseCiphers.clear(); wifiConfig.allowedProtocols.clear(); wifiConfig.SSID = newName; wifiConfig.wepKeys[0] = ""; wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); wifiConfig.wepTxKeyIndex = 0; Method setConfigMethod = mWifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class); setConfigMethod.invoke(mWifiManager, wifiConfig); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
取得現在連到的Wifi名稱:
public String getCurrentWifi(){
WifiManager mWifiManager = (WifiManager)"你的Activity".this.getSystemService(Context.WIFI_SERVICE);
WifiInfo mWifiInfo;
if(mWifiManager.isWifiEnabled())
{
mWifiInfo = mWifiManager.getConnectionInfo();
Log.e(TAG,"Current Wifi is " + mWifiInfo.getSSID());
return mWifiInfo.getSSID();
}else {
return "getCurrentWifi : Wifi is close";
}
}
沒有留言: