一.WIFI狀態的獲取和更改
適用於 SDK1.0 , SDK1.5
1.獲取WIFI狀態
方法1:通過WifiManager進行操作
1WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
2
3wifiManager.isWifiEnabled();
要求權限:android.permission.ACCESS_WIFI_STATE
方法2:通過Settings.System進行操作
1Settings.System.getInt(getContentResolver(), Settings.System.WIFI_ON);
返回 “0″ “1″
2.通過 WifiManager 更改WIFI狀態
1WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
2wifiManager.setWifiEnabled( false);
3wifiManager.setWifiEnabled( true );
二.gps狀態的獲取和更改
android GPS 狀態的修改。但是SDK1.5之后就出現了很多詭異的地方,原來在SDK1.1以下的版本中開發的有關GPS開關的應用都出現了問題。
問題的根源:SDK1.5 把系統數據庫中GPS開關的閥值從 system 表移動到了secure 表。
擴展:
1、通過adb shell 進入系統文件系統,cd data/data/com.android.providers.settings/databases 。然后進入settings.db 數據庫中。輸入 .schema查看所有表結構,你會發現有system 和 secure 表。
2、GPS是由location_providers_allowed 來控制的。當記錄值為 location_providers_allowed|gps 表示僅GPS定位。(紅色標記處為:”network” 僅基站定位 ;“gps” 僅GPS定位 ; “network,gps” 基站、GPS都開放;” “ 關閉定位)
當然獲取GPS狀態的方法依然沒有改變(獲取方法中做了封裝)
1Settings.System.getString(getContentResolver(), Settings.System.LOCATION_PROVIDERS_ALLOWED);
要在Activity或者service中運行。當然別忘記了權限要求:android.permission.WRITE_SETTINGS
返回String :”network” 僅基站定位 ;“gps” 僅GPS定位 ; “network,gps” 基站、GPS都開放;” “ 關閉定位
修改的時候出漏子了!SDK1.0中的方法可用,但在SDK1.5中報錯:(當然,權限還是要加:android.permission.WRITE_SETTINGS)
1Settings.System.putString(getContentResolver(), Settings.System.LOCATION_PROVIDERS_ALLOWED, "network");
2
3Settings.System.putString(getContentResolver(), Settings.System.LOCATION_PROVIDERS_ALLOWED, "gps");
SDK1.5報錯說:location_providers_allowed has been moved to secure table。
好,那我們換另外方法試試:我不修改system表,我直接修改secure表總可以了吧!那我們就來試試~!將以上方法改為
1Settings.secure.putString(getContentResolver(), Settings.secure.LOCATION_PROVIDERS_ALLOWED, "network");
2
3Settings.secure.putString(getContentResolver(), Settings.secure.LOCATION_PROVIDERS_ALLOWED, "gps");
然后加上權限 android.permission.WRITE_SECURES.
結果咋樣?結果沒有報錯,卻提示 android.permission.WRITE_SECURES 為被授予!android對secure表做了嚴格的權限控制,一般的程序休想去對她做update 和insert。
最后無奈,只能提示用戶手動開啟gps功能。