【问题标题】:exceeded maximum number of wifi locks android超过了wifi锁android的最大数量
【发布时间】:2014-02-15 09:56:17
【问题描述】:

在获取WakeLockWifiLock 时,我每5 分钟向服务器发送一次latitudelongitude,但出现错误

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

sn-p的代码是,

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;
        }

    }
}

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

【问题讨论】:

  • 不确定您是否发现了这一点,但您多久调用一次获取/释放函数。无法真正帮助弄清楚发生了什么,使用您的一些主要代码来查看唤醒锁类是如何被调用的。

标签: android map wifi latitude-longitude


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我只是被try-catch包围了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多