找不到 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)
我正在研究 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)