【问题标题】:Handle WifiManager#startScan on foreground in Android P在 Android P 的前台处理 WifiManager#startScan
【发布时间】:2019-01-15 02:59:34
【问题描述】:

作为来自herehere 的一些信息。我们知道在 Android P 中

每个前台应用程序可以在 2 分钟内扫描 4 次
所有后台应用程序组合可以在 30 分钟内扫描一次

经过测试,我看到,从第 5 次扫描(在 2 分钟内)开始,扫描被限制为

WifiService: startScan uid=10085
WifiScanRequestProxy: Scan request from vn.linh.androidwifiscanner throttled

立即返回旧值(onReceive没有任何错误或异常。然后我不知道哪个值来自节流扫描。

目前,我想在用户扫描 4 次以上(节流扫描后)后 2 分钟内显示一个带有倒计时的弹出窗口。

当然,我可以用2减去手动计算用户扫描的总时间,但我认为这不是很有效(例如:如果应用程序支持工作背景,我们需要通过不同的方式检查或即使在下一个 Android 中,他们也允许 5 而不是 4,...)

有没有人遇到过这个问题并找到了有效的解决方法?

这是我当前的代码

class MainActivity : AppCompatActivity() {
    lateinit var wifiManager: WifiManager

    public override fun onCreate(savedInstanceState: Bundle?) {
        ...

        button_scan.setOnClickListener {
            scanWifiNetworks()
        }
        wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
    }

    private fun scanWifiNetworks() {
        registerReceiver(wifiReceiver, IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
        val success = wifiManager.startScan()
        if (!success) {
            scanFailure()
        }
        Toast.makeText(this, "Scanning", Toast.LENGTH_SHORT).show()
    }

    private fun scanFailure() {
        Toast.makeText(this, "Scan failure", Toast.LENGTH_SHORT).show()
    }

    private var wifiReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            Log.d(TAG, "onReceive " + wifiManager.scanResults.size)
            unregisterReceiver(this)
        }
    }
}

https://github.com/PhanVanLinh/AndroidWifiScanner

任何帮助或建议将不胜感激。

【问题讨论】:

    标签: android wifimanager android-9.0-pie


    【解决方案1】:

    嗯,我能找到的最接近您的案例的是布尔标志 EXTRA_RESULTS_UPDATED,在 onReceive 收到的意图中提供。

    根据文档,如果您的应用程序在短时间内请求太多次,无论应用程序处于前台还是后台,您都会得到这个false,这样可以解决您为两者编写两个不同逻辑并计数的问题手动(无论是 4 还是 5 都无所谓),但这也不是您将此标志设为 false 的唯一原因。但我认为它可能会有所帮助。

    你可以在这里查看官方文档: https://developer.android.com/reference/android/net/wifi/WifiManager.html#EXTRA_RESULTS_UPDATED

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多