无法找到wifi网络

时间:2018-01-20 22:57:41

标签: python-3.x sl4a

我正在使用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中运行

1 个答案:

答案 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)