web-dev-qa-db-ja.com

Android Pで廃止されたWifiManagerのstartScan()

たとえば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

19
EAK TEAM

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

11
marko.tm

APIレベルPでは、startScan()を別のクラス(WifiScanner)に移動し、いくつかの重要な違いがあると考えています。

参照: https://Android.googlesource.com/platform/frameworks/base/+/Android-p-preview-1/wifi/Java/Android/net/wifi/WifiScanner.Java

これに対する代替ソリューションがあれば、私もそれを聞きたいです。

現時点では、公式ドキュメントがリリースされるまでstartScan()を使用するだけです。

7
Nino Gonzales

startScan()は、私が Google Issue 79906367 を挙げたように、実際にはPでかなりバグがあります。

WifiScannerは、アプリへのアクセスがないことを意味するSystemApiとしてマークされているため、WifiScannerが代わりになるとは思いません...

RTTは、APでRTTレンジングを実行する前に確認する ScanResult is80211mcResponder を使用して802.11mcをサポートするAPをスキャンする必要があることを意味するため、すぐに聞けることを願っています。

6
meavydev

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標準のサポートを開始します。

いくつかの例:

2

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

追加の読書

[3] https://en.wikipedia.org/wiki/IEEE_802.11mc

[4] https://fit-iot.com/web/wifi-indoor-positioning/

1
heliam1

から WifiManager#EXTRA_RESULTS_UPDATED

注:Android.Manifest.permission.NETWORK_SETTINGS権限を保持しているアプリは、スキャンスロットルから除外されます。

注:これはシステム権限です。通常のアプリは、ルート権限を付与してアプリを「特権」ロケーションに移動するか、カスタムROMに焼き付けない限り使用できません。

1
Sevenate

Googleは、アプリケーションがwifiをスキャンすることを制限しようとしていると思います。

このメソッドはAPIレベル28で廃止されました。アプリがスキャンリクエストをトリガーする機能は、将来のリリースで削除される予定です。 ここのドキュメントを確認してください。

1
Manmohan Soni