.startScan()が可能な状態とは

1,059 views
Skip to first unread message

だい

unread,
Aug 29, 2014, 9:25:43 PM8/29/14
to android-g...@googlegroups.com
お世話になります、ダイです。
作成しているアプリで、WifiがOFFをONに切り替えて、ONになったという状態が帰ってきたら、APスキャンを行い、
スキャン結果のリストを得たいのですが、ONになった状態が帰ってきて即座にスキャンをかけてもスキャン結果を得られません。
ONになった状態から数秒たってからやっとスキャン結果が得られます。
WifiがONになった状態=スキャンができる状態 ではないのでしょうか?

WifiをOFF→ONにするというのは、   .setWifiEnabled(true); を実行することで行い、
その後Wifiの状態を監視し、wifiManager.isWifiEnabled()== trueの状態に遷移したタイミングで
システムにブロードキャストし、ブロードキャストをレシーブしたタイミングからスキャンを開始します。
以下のようにやってます。

 
        Thread thread = new Thread() {
            @Override
            public void run() {
                WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
                while(true){
                    if (wifiManager.isWifiEnabled() == false) {
                                                  Log.i(TAG," Wifi OFF");
                        //wifi接続をONしている途中(WIFI_STATE_ENABLING)でなければ、
                        if(wifiManager.getWifiState()!= WifiManager.WIFI_STATE_ENABLING){
                            Log.i(TAG,"WifiをONにしている途中");
                            //Wifiをオンにします
                            wifiManager.setWifiEnabled(true);
                        }
                    }else if(wifiManager.isWifiEnabled()== true){

                        Log.i(TAG,"Wifi ON");    //WifiがONになったシステム状態を取得したことをブロードキャスト
                        String ex_Str = "WIFI_ON_RECV";
                        Intent i_ex_Str = new Intent(ACTIONforControlleMenu);   
                        i_ex_Str.putExtra("message", ex_Str);
                        sendBroadcast(i_ex_Str);
                        break;
                    }
                }
            }

        };
        thread.start();

他にスキャンが可能な状態は、他に考慮すべき事があるのでしょうか?
お詳しい方おられましたら、ご教授願います。

田代透

unread,
Aug 30, 2014, 4:48:21 AM8/30/14
to android-g...@googlegroups.com
設定画面で、WiFiオフの状態からオンの状態にきりかえても、APのリストが出るまでには時間がかかりますが…

WiFiが利用可能になったのは、APの探索が可能になった状態で、APの探索には時間がかかるものだと思います。

APリストを表示選択する画面では周期的にAPリストを取得し更新するようにすればよいのではないでしょうか。
画面でないならば、適当なAPが見つかるまで周期的に取得し、見つかったら接続して取得をやめるとか。


2014年8月30日 10:25 だい <dadaik...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
このグループに投稿するには android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
Toru Tashiro
toru...@gmail.com

だい

unread,
Sep 1, 2014, 9:20:02 PM9/1/14
to android-g...@googlegroups.com
Toru様

ご回答ありがとうございます。

>APリストを表示選択する画面では周期的にAPリストを取得し更新するようにすればよいのではないでしょうか。
>画面でないならば、適当なAPが見つかるまで周期的に取得し、見つかったら接続して取得をやめるとか。

画面でなく、内部での自動処理で行なっています。
現在の実装は上記にご回答いただいたように、適当なAPが見つかるまで周期的にスキャンを繰り返すような動作を行なっています。

>WiFiが利用可能になったのは、APの探索が可能になった状態で、APの探索には時間がかかるものだと思います。

そういうものなんですね、実機動作からもそのような動作が見られますよね、

また、書き方が悪くて伝わりづらかったかとおもいますが、
私のもうひとつの質問として、システムのステートでAPスキャンが可能な状態というものがないか、ということです。
例えば、システムからのステート変化におけるブロードキャストをレシーブして、そのステート状態がXXXだったら、スキャンが可能!、
というような動作を行いたいのですが。。。そのようなステートはあるのでしょうか?

よろしくお願いします。






2014年8月30日土曜日 17時48分21秒 UTC+9 Toru:
設定画面で、WiFiオフの状態からオンの状態にきりかえても、APのリストが出るまでには時間がかかりますが…

WiFiが利用可能になったのは、APの探索が可能になった状態で、APの探索には時間がかかるものだと思います。

APリストを表示選択する画面では周期的にAPリストを取得し更新するようにすればよいのではないでしょうか。
画面でないならば、適当なAPが見つかるまで周期的に取得し、見つかったら接続して取得をやめるとか。


2014年8月30日 10:25 だい
お世話になります、ダイです。

だい

unread,
Sep 2, 2014, 11:15:37 PM9/2/14
to android-g...@googlegroups.com
だいです。
自己解決しました。

WifiをOFF→ONにした後、

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION

をレシーブできたタイミングでスキャンが可能な状態のようです。

ご協力いただいた皆様、ありがとうございまいした。

2014年8月30日土曜日 10時25分43秒 UTC+9 だい:

田代透

unread,
Sep 3, 2014, 12:34:39 AM9/3/14
to android-g...@googlegroups.com
を参照すると

1.startScan() でスキャンを開始する。
 この呼出はすぐにすぐに戻り、スキャンが完了した時に非同期にイベントが発生する

2.SCAN_RESULTS_AVAILABLE_ACTIONが発生する
 これが非同期に発生するイベント

3.getScanResult()で結果を読み込む。


WiFiをONにした時に、自動的にstartScan()が実行されているということか…
そこまでドキュメントは読んでいないのですが、上記公式ドキュメントで確認してみてください。

とりあえず、解決おめでとうございます。

2014年9月3日 12:15 だい <dadaik...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
このグループに投稿するには android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
Toru Tashiro
toru...@gmail.com
Reply all
Reply to author
Forward
0 new messages