解決Android6.0以上掃描WIFI獲得列表為空
阿新 • • 發佈:2018-12-31
我們知道Android SDK23之後Google對許多許可權進行了修改,比如wifi和藍芽。在Android6.0及以上掃描WIFI必須先開啟GPS,否則掃描得到的WIFI列表為空。解決方法如下:
1.首先在AndroidManifest.xml檔案中再增加以下許可權
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"2.可以在自定義的掃描函式裡做如下限制,在掃描之前提醒使用者開啟GPS></uses-permission>
/**
* 掃描Wifi
* @param context
*/
public void startScan(Context context){
LocationManager locManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
Toast.makeText(context,"未開啟GPS,無法掃描", Toast.LENGTH_SHORT).show();
}else {
//開始掃描
mWifiManager.startScan();
.....
}
}
3.但是打開了GPS之後這樣做還是無法得到掃描結果的,得到的List的size還是為零,這是為什麼呢?經過一番查詢之後,
原來是還要在程式碼中開啟ACCESS_COARSE_LOCATION許可權。在呼叫上述方法之前,先呼叫下面這個方法。
public void requestLocationPermission(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//如果 API level 是大於等於 23(Android 6.0) 時 //判斷是否具有許可權 if (ContextCompat.checkSelfPermission這樣就能準確的掃描到wifi了。當然更快捷的方法把專案的目標SDK和最小SDK都設定23以下。(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //判斷是否需要向用戶解釋為什麼需要申請該許可權 if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)) { Toast.makeText(getActivity(), "自Android 6.0開始需要開啟位置許可權才可以搜尋到WIFI裝置", Toast.LENGTH_SHORT); } //請求許可權 ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE_ACCESS_COARSE_LOCATION); } } }