1

2分ごとにwifiネットワークをスキャンしようとしています。そのためのサービスを利用しています。電話をかけた後、電話が「アクティブ」または「使用中」の場合、6秒でstartscan()取得します。SCAN_RESULTS_AVAILABLE_ACTIONだから私は定期的にwifiをスキャンすることができます。しかし、電話が特定の時間(10分)誰にも触れられなかった後、startscan()は「動作」を停止し、10分後にのみ結果が得られます。誰かがこれを経験しましたか?

4

1 に答える 1

3

これによると、私は解決策を見つけました - これは、Wifi スリープ ポリシーが原因です。これを使用して、wifi デバイスがスリープ状態にならないように設定できます。

Settings.System.putInt(getContentResolver(),
              Settings.System.WIFI_SLEEP_POLICY, 
              Settings.System.WIFI_SLEEP_POLICY_NEVER);

AndroidManifest.xmlこの権限をファイルに追加したことを確認してください。

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

スキャン期間は 5 ~ 15 秒です。これは自動的に行われます。電話する必要はありませんstartscan()。Android スキャン プロセスの詳細については、こちらを参照してください。
編集:
ホットスポットのみをスキャンしたい場合、これはさらに良い解決策かもしれません:
WIFI_MODE_SCAN_ONLY- 次の方法でアクティブ化できます:

WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiLock wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_SCAN_ONLY , "MyWifiLock");
if(!wifiLock.isHeld()){
    wifiLock.acquire();
}

それを解放することを忘れないでください。WifiLock ここ
に関する詳細情報 もこの許可を定義しています:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

Edit2これも同様に機能します。Wi
-Fi を定期的に有効または無効にすることができます。

WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if(wm.isWifiEnabled() == false) {
    wm.setWifiEnabled(true);
}

次に、ブロードキャストレシーバーがWIFI_STATE_ENABLEDエクストラを含むアクションを取得した後にスキャンします

于 2013-02-16T13:39:01.687 に答える