package com.mobile.mobilehardware.wifilist; import android.Manifest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Build; import org.json.JSONArray; import java.util.List; class WifiInfo { static void getWifiList(final Context context, final WifiScanListener wifiScanListener) { if (wifiScanListener == null) { throw new NullPointerException("the WifiScanListener is null"); } final long startTime = System.currentTimeMillis(); final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); final WifiBean wifiBean = new WifiBean(); if (wifiManager == null) { wifiScanListener.onResult(wifiBean.toJSONObject()); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M&&context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { wifiScanListener.onResult(wifiBean.toJSONObject()); } BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() { @Override public void onReceive(Context c, Intent intent) { context.unregisterReceiver(this); scanSuccess(wifiManager, wifiBean, startTime, wifiScanListener); } }; IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); context.registerReceiver(wifiScanReceiver, intentFilter); wifiManager.startScan(); } private static void scanSuccess(WifiManager wifiManager, WifiBean wifiBean, long startTime, WifiScanListener wifiScanListener) { List<ScanResult> results = wifiManager.getScanResults(); wifiBean.setWifiScanStatus(results.size() != 0); JSONArray scanArray = new JSONArray(); for (ScanResult scanResult : results) { WifiBean.WifiResultBean wifiResultBean = new WifiBean.WifiResultBean(); wifiResultBean.setBSSID(scanResult.BSSID); wifiResultBean.setSSID(scanResult.SSID); wifiResultBean.setCapabilities(scanResult.capabilities); wifiResultBean.setLevel(scanResult.level); scanArray.put(wifiResultBean.toJSONObject()); } wifiBean.setWifiScanResult(scanArray); wifiBean.setTime(System.currentTimeMillis() - startTime); wifiScanListener.onResult(wifiBean.toJSONObject()); } }