Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检查wifi扫描是否完成_Android_Android Wifi - Fatal编程技术网

Android 检查wifi扫描是否完成

Android 检查wifi扫描是否完成,android,android-wifi,Android,Android Wifi,我正在编写一个代码,用于连续获取范围内所有接入点的信息 这是我的密码: myRunnable = new Runnable() { @Override public void run() { while(){ wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifi.startScan(); List<ScanResult>

我正在编写一个代码,用于连续获取范围内所有接入点的信息

这是我的密码:

       myRunnable = new Runnable() {
       @Override public void run() {
       while(){
       wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
       wifi.startScan(); 
       List<ScanResult>results= wifi.getScanResults();
        try{
          //data Logging
            }  
           } 
         } 
        };

      myThread = new Thread(myRunnable);
      myThread.start();
myRunnable=newrunnable(){
@重写公共无效运行(){
while(){
wifi=(WifiManager)getSystemService(Context.wifi\u服务);
wifi.startScan();
Listresults=wifi.getScanResults();
试一试{
//数据记录
}  
} 
} 
};
myThread=新线程(myRunnable);
myThread.start();
由于数据的扫描和记录不断重复,我想在记录数据之前检查扫描是否完成。 在记录数据之前,是否有任何标志或函数检查wifi.startScan()是否完整。
你能帮我写个密码吗

您需要实现一个
BroadcastReceiver
侦听从
WifiManager.startScan()返回的扫描结果
onReceive()
允许您直接访问扫描结果。扫描完成并触发onReceive()大约需要1秒的时间

我想在记录数据之前检查扫描是否完成。是 有任何检查wifi的标志或函数。startScan()是 在记录数据之前,是否完成。你能帮帮我吗 带着密码出去

是的,有专门用于此目的的mechanizm。为了达到您的目标,您需要实施
BroadcastReceiver
,它将监听
WiFi
扫描

您只需使用适当的
IntentFilter
创建
BroadcastReceiver
。因此,您需要对筛选器执行以下操作:

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
此操作意味着访问点扫描已完成,并且结果可用。然后只需创建
BroadcastReceiver
(静态或动态,这无关紧要)

如果您不知道如何开始,请参阅本教程:


为了巩固上述答案,我只想添加相关代码以给出一个示例

1。注册活动

// don't forget to set permission to manifest
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
context.registerReceiver(this,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
//check if WIFI is enabled and whether scanning launched
if(!wifiManager.isWifiEnabled() || !wifiManager.startScan())
{
  throw new Exception("WIFI is not enabled");
}
2。接收结果

// don't forget to set permission to manifest
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
context.registerReceiver(this,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
//check if WIFI is enabled and whether scanning launched
if(!wifiManager.isWifiEnabled() || !wifiManager.startScan())
{
  throw new Exception("WIFI is not enabled");
}
要接收,注册的对象(在本例中)需要扩展
BroadcastReceiver
,并实现以下方法:

public void onReceive(Context context, Intent intent) {
        List<ScanResult> result = wifiManager.getScanResults();
 } 
public void onReceive(上下文、意图){
List result=wifiManager.getScanResults();
} 

根据我的经验,在某些设备上需要25秒以上的时间。