Android6.0以降では WifiManager#getScanResults を実行するにはパーミッションが必要になっています。
参考:Android 6.0 以降で WifiManager.getScanResults() を普通に実行しても結果が空のリストになってしまう | 穀風
パーミッションを取得していても、実際に使っていると時々空のリストが返される事がありました。
原因は端末の位置情報がOFFになっている事でした。
Wifiの情報を得るのに位置情報がONになっている必要があるのは盲点でしたが、必要なパーミッションを考えると納得です。
GoogleにはMACアドレスから位置情報を得るAPIもありますからね。
ということで、WifiManager#getScanResults を使う前にはパーミッションに加えて、位置情報がONになっている事を確認しましょう。