完成当前扫描后,开始新的wifi扫描 [英] Start new wifi scan after finishing the current scan

查看:85
本文介绍了完成当前扫描后,开始新的wifi扫描的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作一个将所有wifi BSSID和RSS存储到SQLite数据库中的应用程序. (我的SQLite表名为"scanres"

I am trying to make an apps that will store all wifi BSSID and RSS into an SQLite Database. (my SQLite table named "scanres"

这是我的onCreate()上的代码的一部分:

here is part of my code on my onCreate():

wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); //jgn lupa manifest xml nya kasih permission!!!
    if (wifi.isWifiEnabled() == false)
    {
        wifi.setWifiEnabled(true);
    }   

    x = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context c, Intent intent) 
        {
            results = wifi.getScanResults();
            size = results.size();
            if (size > 0) {
                for (int i=0; i<size; i++){
                    ScanResult scanresult = wifi.getScanResults().get(i);
                    int rssi = scanresult.level;
                    String bssid = scanresult.BSSID;
                    datavar.execSQL("insert into scanres values('"+bssid+"',"+rssi+")");
                }
                unregisterReceiver(x); //stops the continuous scan
            } else {
                unregisterReceiver(x); 
                Toast.makeText(SearchActivity.this, "FAIL", Toast.LENGTH_LONG).show();
            }
        }
    };

    //wifiscan start
    new wifiscan1().execute();

这是我的wifiscan1,我正在使用AsyncTask:

and here is my wifiscan1 , I'm using AsyncTask:

public class wifiscan1 extends AsyncTask<Void, String, Void>{
    ProgressDialog pd = new ProgressDialog (SearchActivity.this);

    protected void onPreExecute(){
        pd.setMessage("wifi scan...");
        pd.setIndeterminate(true);
        pd.show();
    }

    protected void onPostExecute(Void result){
        pd.dismiss();
    }

    @Override
    protected Void doInBackground(Void... params){
        registerReceiver(x, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        wifi.startScan();
        return null;
    }
}

我要使此应用程序连续扫描12次.我尝试使用for loop,但是下一次扫描在完成当前扫描之前已经开始,导致当前扫描被跳过.

I want to make this app to scan for 12 times in a row. I tried using for loop , but the next scan already started before the current scan is done, causing the current scan to be skipped.

在上一次扫描完成后,如何使下一次扫描开始?

how do I make the next scan to be started after the previous scan is done?

更新:我的日志

05-08 16:10:42.869: E/Database(15427):  at com.arranda.insidefek.SearchActivity.onCreate(SearchActivity.java:44)
05-08 16:11:00.919: E/Database(15427):  at com.arranda.insidefek.SearchActivity.onCreate(SearchActivity.java:44)
05-08 16:15:19.239: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:152)
05-08 16:15:19.239: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:1)
05-08 16:15:19.249: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:153)
05-08 16:15:19.249: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:1)
05-08 16:15:19.269: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:152)
05-08 16:15:19.269: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:1)
05-08 16:15:19.269: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:153)
05-08 16:15:19.269: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:1)
05-08 16:15:19.289: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:152)
05-08 16:15:19.289: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:1)
05-08 16:15:19.299: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:153)
05-08 16:15:19.299: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:1)
05-08 16:15:19.309: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:152)
05-08 16:15:19.309: E/Database(15682):  at com.arranda.insidefek.SearchActivity$wifiscan1.doInBackground(SearchActivity.java:1)
05-08 16:15:19.329: E/Database(15682):  at com.arranda.insidefek.SearchActivity.onCreate(SearchActivity.java:44)
05-08 16:15:19.819: E/AndroidRuntime(15682): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in com.arranda.insidefek.SearchActivity$wifiscan1$1@40573ba8
05-08 16:15:19.819: E/AndroidRuntime(15682): Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.arranda.insidefek.SearchActivity$wifiscan1$1@40573ba8
05-08 16:15:19.819: E/AndroidRuntime(15682):    at com.arranda.insidefek.SearchActivity$wifiscan1$1.onReceive(SearchActivity.java:174)
05-08 16:15:26.099: E/AndroidRuntime(15700): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in com.arranda.insidefek.SearchActivity$wifiscan1$1@4054f2d8
05-08 16:15:26.099: E/AndroidRuntime(15700): Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.arranda.insidefek.SearchActivity$wifiscan1$1@4055b3a0
05-08 16:15:26.099: E/AndroidRuntime(15700):    at com.arranda.insidefek.SearchActivity$wifiscan1$1.onReceive(SearchActivity.java:174)
05-08 16:15:33.499: E/AndroidRuntime(15711): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in com.arranda.insidefek.SearchActivity$wifiscan1$1@40541cd0
05-08 16:15:33.499: E/AndroidRuntime(15711):    at com.arranda.insidefek.SearchActivity$wifiscan1$1.onReceive(SearchActivity.java:169)
05-08 16:15:40.329: E/AndroidRuntime(15721): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in com.arranda.insidefek.SearchActivity$wifiscan1$1@40559ae8
05-08 16:15:40.329: E/AndroidRuntime(15721): Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.arranda.insidefek.SearchActivity$wifiscan1$1@40559ae8
05-08 16:15:40.329: E/AndroidRuntime(15721):    at com.arranda.insidefek.SearchActivity$wifiscan1$1.onReceive(SearchActivity.java:174)
05-08 16:16:23.159: E/AndroidRuntime(15792): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in com.arranda.insidefek.SearchActivity$wifiscan1$1@40559988
05-08 16:16:23.159: E/AndroidRuntime(15792): Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.arranda.insidefek.SearchActivity$wifiscan1$1@40559988
05-08 16:16:23.159: E/AndroidRuntime(15792):    at com.arranda.insidefek.SearchActivity$wifiscan1$1.onReceive(SearchActivity.java:173)
05-08 16:18:01.519: E/Database(15901):  at com.arranda.insidefek.SearchActivity.onCreate(SearchActivity.java:44)
05-08 16:18:02.559: E/AndroidRuntime(15901): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in com.arranda.insidefek.SearchActivity$1@40532608
05-08 16:18:02.559: E/AndroidRuntime(15901):    at com.arranda.insidefek.SearchActivity$1.onReceive(SearchActivity.java:86)
05-08 16:18:09.689: E/Database(15915):  at com.arranda.insidefek.SearchActivity.onCreate(SearchActivity.java:44)
05-08 16:18:09.919: E/AndroidRuntime(15915): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in com.arranda.insidefek.SearchActivity$1@40532650
05-08 16:18:09.919: E/AndroidRuntime(15915):    at com.arranda.insidefek.SearchActivity$1.onReceive(SearchActivity.java:86)

推荐答案

好,这个问题由我自己解决.我要做的只是将wifi.startScan()放在onRecieve()方法上,并在名为count

well, the problem is solved by myself. what i do is just put the wifi.startScan() on the onRecieve() method and with the help from an integer named count

所以我的代码现在看起来像这样:

so my code is look like this now:

x = new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context c, Intent intent) 
            {
                datavar.execSQL("delete from hasilscan");
                results = wifi.getScanResults();
                size = results.size();
                if (size > 0) {
                    for (int i=0; i<size; i++){
                        ScanResult scanresult = wifi.getScanResults().get(i);
                        int rssi = scanresult.level;
                        String bssid = scanresult.BSSID;
                        datavar.execSQL("insert into hasilscan values('"+bssid+"',"+rssi+")");
                    }
                    count++;
                    if (count < 12) { //because i want the wifi scan to be repeated 12 times in a row
                        wifi.startScan();
                    } else {
                        unregisterReceiver(x); //stops the continuous scan  
                    }
                } else {
                    unregisterReceiver(x); 
                    Toast.makeText(MainActivity.this, "FAIL", Toast.LENGTH_LONG).show();
                }
            }
        };

使用此代码,新扫描在上一次扫描完成后开始,因此不会中断前一次扫描

with this code, the new scan is started after the previous scan is done so it wont interrupt the previous scan

这篇关于完成当前扫描后,开始新的wifi扫描的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆