たとえばmWifimanager.startScan();
なしで3秒ごとにwifiからスキャン結果を取得する方法
グーグルは言う:
startScan() This method was deprecated in API level P. The ability for apps to trigger scan requests will be removed in a future release.
このAPIレベルでは、startScan
を呼び出さずにList<ScanResult> results = mWifiManager.getScanResults();
を使用しています。リストにはwifi APが含まれていますが、更新が非常に遅くなります
2019年1月12日に更新: https://issuetracker.google.com/issues/112688545
Googleは、Android P:でstartScan()関数の制限を文書化しました。
「ネットワークパフォーマンスの向上とバッテリー寿命の向上のために、アプリが要求できるスキャンの数をさらに制限しています。
WifiManager.startScan()の使用は以下に制限されています。-各フォアグラウンドアプリは、2分ごとに4回のスキャンに制限されています。 -組み合わせたすべてのバックグラウンドアプリは、30分ごとに1回のスキャンに制限されます。」
ソース: https://issuetracker.google.com/issues/79906367
編集2018年8月8日:ここにも情報が追加されました: https://developer.Android.com/guide/topics/connectivity/wifi-scan
APIレベルPでは、startScan()を別のクラス(WifiScanner)に移動し、いくつかの重要な違いがあると考えています。
これに対する代替ソリューションがあれば、私もそれを聞きたいです。
現時点では、公式ドキュメントがリリースされるまでstartScan()を使用するだけです。
startScan()は、私が Google Issue 79906367 を挙げたように、実際にはPでかなりバグがあります。
WifiScannerは、アプリへのアクセスがないことを意味するSystemApiとしてマークされているため、WifiScannerが代わりになるとは思いません...
RTTは、APでRTTレンジングを実行する前に確認する ScanResult is80211mcResponder を使用して802.11mcをサポートするAPをスキャンする必要があることを意味するため、すぐに聞けることを願っています。
StartScan()メソッドはAndroid Pで非推奨になり、802.11mc標準の新しいRTTプロトコルを三辺測量アルゴリズムで使用する必要があります。 https://Android-developers.googleblog.com/ 2018/03/previewing-Android-p.html
APのX、Y位置は正確な位置決めのために既知である必要があり、APは802.11mcのFine Time Measurementをサポートする必要があります。 Intel®Wireless-AC 9260は802.11mcをサポートし、いくつかのAPは802.11mc標準のサポートを開始します。
いくつかの例:
Googleの意図は、少なくとも屋内の場所ではなく、開発者にWifiRttManagerの使用を強制することであるように思われます[1]。または、通常のGoogle Playロケーションサービスに依存します。これは、一部のユースケースではオプションですが、すべてではありません。平均的なユースケース向けに最適化されています。ユースケースは平均的なユースケースではありません。
残念ながら、WifiRttManagerが位置を計算する方法では、wifiアクセスポイントに802.11mcが必要です。ただし、これらのポイントに接続する必要はありません。現在、事実上0台のルーターにこの標準があります。 [2] [3] [4] 3つのアクセスポイントを使用すると、1〜2mの精度に近い位置を取得できます。
ただし、この機能に制限を設けるかどうかは誰にもわかりません。この選択をユーザーや開発者から遠ざける理由はまったくありません。うんざり。
したがって、屋内の場所には少なくとも暗黒時代があるようです。おそらく回避策は、接続しているデバイスを持ち、それらにpingを実行することです。
[1] https://developer.Android.com/reference/Android/net/wifi/rtt/WifiRttManager
[2] https://github.com/Plinzen/Android-rttmanager-sample
追加の読書
から WifiManager#EXTRA_RESULTS_UPDATED
注:Android.Manifest.permission.NETWORK_SETTINGS権限を保持しているアプリは、スキャンスロットルから除外されます。
注:これはシステム権限です。通常のアプリは、ルート権限を付与してアプリを「特権」ロケーションに移動するか、カスタムROMに焼き付けない限り使用できません。
Googleは、アプリケーションがwifiをスキャンすることを制限しようとしていると思います。
このメソッドはAPIレベル28で廃止されました。アプリがスキャンリクエストをトリガーする機能は、将来のリリースで削除される予定です。 ここのドキュメントを確認してください。