根据官方的Android文档,WifiManager中的startScan方法在API P级别已被弃用。但是我尝试在API 26级别(P之前)使用此方法却没有成功。我开发了一个需要扫描WiFi网络的应用程序,如果用户同意所需权限,则此行为对于应用程序的适当功能至关重要。然而,当调用startScan方法时,我没有收到任何响应。有人能帮助我解决这个问题或找到替代解决方案吗?
这是文档的链接。 https://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan() 谢谢
编辑: 以下是启动扫描进程的代码:
这是文档的链接。 https://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan() 谢谢
编辑: 以下是启动扫描进程的代码:
public boolean startScan() {
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (!wm.isWifiEnabled()) {
try {
wm.setWifiEnabled(true);
} catch (SecurityException e) {
Log.w(LOG_TAG, "Error enabling wifi", e);
return false;
}
}
boolean started = wm.startScan();
Log.d(LOG_TAG, "Scan started? " + started);
return started;
}
这是接收扫描结果的BroadcastReceiver。在Android 8及以上的版本中,只有当targetSdkVersion为26+时有效。
public class InOutWifiScanResultsReceiver extends BroadcastReceiver {
private static final String LOG_TAG = "ScanResults";
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent); // Never called in Android 8 and targetSdkVersion 26+
List<ScanResult> results = getWifiResults(context);
Log.d(LOG_TAG, "Received results (" + results.size() + " AP's)");
}
private static List<ScanResult> getWifiResults(Context context) {
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
try {
return wm.getScanResults();
} catch (SecurityException e) {
return new ArrayList<>();
}
}
}
在清单文件中,我们使用以下权限和声明了广播接收器:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<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"/>
<receiver
android:name=".InOutWifiScanResultsReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.net.wifi.SCAN_RESULTS"/>
</intent-filter>
</receiver>
在运行时需要位置权限,所以我确定它已被允许。我也确信位置是活动的(GPS级别)。
BroadcastReceiver工作正常,因为使用targetSdkVersion = 25或更低版本编译时,一切都按预期工作并接收到扫描结果。我还测试了android:exported="true",但对结果没有影响。
非常感谢您的帮助。