Kum*_*hav 7 android wifi wifimanager
在Android 8.0上,没有使用wifiManager获取wifi列表,在API级别26以下我得到了列表.
此函数返回WifiManagerObject
public static WifiManager getWifiManager(Context context) {
WifiManager wifiManager = null;
try {
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
} catch (NullPointerException e) {
e.printStackTrace();
}
return wifiManager;
}
Run Code Online (Sandbox Code Playgroud)
此函数返回wifi列表
public static List<ScanResult> getWifiScanResults(Boolean sorted, Context context) {
WifiManager wifiManager = NetworkUtil.getWifiManager(context);
List<ScanResult> wifiList = wifiManager.getScanResults();
//Remove results with empty ssid
List<ScanResult> wifiListNew = new ArrayList<>();
for (ScanResult scanResult : wifiList) {
if (!scanResult.SSID.equals(""))
wifiListNew.add(scanResult);
}
wifiList.clear();
wifiList.addAll(wifiListNew);
return wifiList;
}
Run Code Online (Sandbox Code Playgroud)
我注册了 BroadcastReceiver
WiFiMainActivity.this.registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
Run Code Online (Sandbox Code Playgroud)
这是startScan()方法
public static void startScan(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
}
Run Code Online (Sandbox Code Playgroud)
用户具有以下权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Run Code Online (Sandbox Code Playgroud)
无法跟踪android 8.0 Oreo上的错误,是否还有其他任何我遗漏的权限.
由于Android 8引入了后台执行限制BroadcastReceiver,Manifest因此除了这些操作之外,将不再发送或接收注册的大多数操作.
是的,您正在通过您的注册,Context但也许您的代码是错误的.
您应该通过您Application Context而不是您的注册Activity Context来避免内存泄漏.此外,尝试创建一个空格IntentFilter并在之后添加您的操作.这个代码在我的targetSdkVersion26+ in Android 8 Oreo(Nexus 5X)应用程序中运行良好.
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.wifi.SCAN_RESULTS");
context.registerReceiver(new YourBroadcastReceiver(), intentFilter);
Run Code Online (Sandbox Code Playgroud)
希望这有帮助.
| 归档时间: |
|
| 查看次数: |
2408 次 |
| 最近记录: |