找不到 wifi 网络

Can't find wifi networks

我正在研究 python sl4a 脚本来扫描我周围的 wifi 网络,通过部分匹配搜索特定的 SSID(网络名称是 HOME1234,脚本应该找到所有包含 HOME 的网络),检索完整的网络 SSID从索引列表中连接到它。

问题是函数 Android().wifiGetScanResults() returns 变量类型 sl4a.result。我需要它做的是将其输出为列表,以便算法可以搜索每个元素和 return 它的索引。

这是算法:number=[my_list.index(i) for i in my_list if "HOME" in i]

my_list: 列表搜索槽

HOME:要搜索的网络名称

这是代码

from sl4a import * 
from time import * 

a=Android()

def find_net(): 
    try:
        print("Scanning")
        a.wifiLockAcquireFull() 
        a.wifiStartScan()
        sleep(5)
        print("Scan completed")
        aps=list(a.wifiGetScanResults())
        print("Got results")
        try:
            number=[aps.index(i) for i in aps if "HOM" in i]
        except:
            print("Nothing found")
            return number

    except:
        print("Scan Failed")

 print(find_net())

这段代码给出了这个结果

Scanning
Scan completed
Got results
Nothing found
Scan Failed
None

#[QPython] Press enter to exit

请注意,这是在 android

的 qpython3 中运行的

打印出来一切都很好! 每个 sl4a 调用都会 return 类似 Result(id=1, result=None, error=None) 的东西,所以我 运行 这个:

import sl4a
droid=sl4a.Android()
print(droid.wifiLockAcquireFull())
print(droid.wifiStartScan())
print(droid.wifiGetScanResults())

我得到了:

Result(id=1, result=None, error=None)
java.lang.NullPointerException: throw with null exception
Result(id=2, result=None, error='java.lang.NullPointerException: throw with null exception')
Result(id=3, result=[a list of dictionaries, each one is a wifi], error=None)

运行wifiStartScan的时候好像出问题了,因为是sl4a所以没法控制。此外,仅调用 wifiGetScanResults 仍然可以获得结果,因为 documentation 表示 wifiGetScanResults returns 在 "the most recent" Wifi 扫描和 Android 本身经常执行扫描。

结果是一个字典列表,每个字典都包含这些键:"capabilities"、"frequency"、"ssid"、"bssid"、"level"。 那么你想要的可能是:

import sl4a,time
droid = sl4a.Android()

### keep these if your phone can run wifiStartScan without errors ###
print("Scanning...")
droid.wifiLockAcquireFull()
droid.wifiStartScan()
time.sleep(5)
print("Scan completed")
### keep these if your phone can run wifiStartScan without errors ###

aps = droid.wifiGetScanResults().result
numbers = [i for i in range(len(aps)) if "HOME" in aps[i]["ssid"] ]
print(numbers)