超出Android WiFi锁的最大数量限制

3

我每5分钟向服务器发送纬度经度,同时获得WakeLockWifiLock,但出现错误。

java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
at android.net.wifi.WifiManager$WifiLock.acquire(WifiManager.java:1622)

代码片段的代码如下:

public class WakeLocker {
    private WakeLock wl_cpu;
    private PowerManager mPowerManager;
    private WifiLock wifiLock = null;

    @SuppressLint({ "InlinedApi", "Wakelock" })
    public void acquire(Context ctx) {
        mPowerManager = (PowerManager) ctx
                .getSystemService(Context.POWER_SERVICE);

        WifiManager wm = (WifiManager) ctx
                .getSystemService(Context.WIFI_SERVICE);
        wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
                "MyWifiLock");
        wifiLock.acquire();

        wl_cpu = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
                | PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.ON_AFTER_RELEASE, "MyCpuLock");
        wl_cpu.acquire(10000);
    }

    public void release() {

        if ((wifiLock != null) || (wifiLock.isHeld() == true)) {
            wifiLock.release();
            wifiLock = null;
        }
        if ((wl_cpu != null) || (wl_cpu.isHeld() == true)) {
            wl_cpu.release();
            wl_cpu = null;
        }

    }
}

没有得到任何解决方案。请提供任何建议。谢谢。


不确定你是否解决了这个问题,但你调用获取/释放函数的频率有多高?如果没有看到如何调用wakelocker类的一些主要代码,就很难帮助你弄清楚发生了什么。 - firefistace
2个回答

1

当未持有时,请获取wake lock。将所有wifiLock.acquire()替换为if (!wifiLock.held()) wifiLock.acquire()


-2

我刚刚用try-catch包围了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接