我正在使用python sl4a脚本来扫描我周围的wifi网络,通过部分匹配搜索特定的SSID(网络名称是HOME1234,脚本应该找到包含HOME的所有网络),通过索引从列表中检索完整的网络SSID并连接它。
问题是函数Android().wifiGetScanResults()
返回sl4a.result
类型的变量。我需要做的是将其输出为列表,以便算法可以搜索每个元素并返回其索引。
这是算法: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中运行
答案 0 :(得分:0)
打印出来的一切都很好!
每个sl4a调用都会返回类似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
返回在“最近的”Wifi扫描期间找到的访问点列表,并且Android本身经常执行扫描。
结果是一个词典列表,每个词典都包含以下键:“功能”,“频率”,“ssid”,“bssid”,“级别”。 所以你想要的可能是:
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)