繁体   English   中英

每次按下按钮时,如何在Android手机中接收新的扫描结果?

[英]How can I receive new scan results in my android phone every time I press a button?

我正在创建一个需要扫描周围接入点的应用程序,并根据结果进行一些计算。 到目前为止,我已经确信WifiManager.statScan()方法虽然启动了新的扫描,但不会自动返回新扫描的结果。

这是我的代码:

public void onClick(View v) {
    switch (v.getId()){
        case R.id.button:
            //do some reseting for the GUI and the values of the problem.
            break;
        case R.id.button2:
            wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            wifiManager.startScan();
            List<ScanResult> scanResult = null;
            if(wifiManager.startScan()){
                scanResult = wifiManager.getScanResults();
            }
            // Do the calculations.
            break;

    }
}

我的问题是我不确定是否使用此代码从启动的扫描中实际获取了结果,还是从先前的扫描中获取了结果,如果后者正确,如何从新的扫描中获取结果?

非常感谢你。

在搜索并阅读各种帖子和文摘之后,我的代码进行了如下更改:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
BroadcastReceiver receiver;
private List<ScanResult> scanResult;
boolean waiting;
// and other irrelevant variables.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //initialization of the elements of the GUI
    reset.setOnClickListener(this);
    locate.setOnClickListener(this);
    wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    waiting = true;
    receiver = new WifiScaner(this);
    registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.button:
            // resetting the variables of the application
            break;
        case R.id.button2:
            wifiManager.startScan();
            while (waiting)  {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Log.d("PROJECT1","Wifi WAITING");
            }
            //Calculations
            break;

    }
}

public class WifiScaner extends BroadcastReceiver{
    MainActivity main;
    public WifiScaner(MainActivity main){
        super();
        this.main = main;
    }
    public void onReceive(Context c, Intent intent) {
        scanResult = main.wifiManager.getScanResults();
        waiting = false;
        Log.d("PROJECT1","Wifi RECEIVED");
    }
}

}但是由于某种原因,我似乎从未涉足WifiScaner的onReceive。 任何线索为什么会这样?

没错,扫描需要一些时间,因此无法立即获得结果。 这已由doc的startScan()方法确认:

“请求扫描访问点。立即返回。稍后将通过在扫描完成时发送的异步事件来告知结果的可用性。”

以下链接似乎是一个很好的示例,说明如何在扫描完成时得到通知: http : //www.tutorialspoint.com/android/android_wi_fi.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM