【问题标题】:Android WifiLock is not working correctly on AndroidAndroid WifiLock 在 Android 上无法正常工作
【发布时间】:2019-09-18 11:40:33
【问题描述】:

我在连接到接入点后尝试锁定 wifi,但设备在 2 到 3 分钟后切换到另一个网络。 这是我正在尝试做的事情。


        private static final String TAG = BuildConfig.APPLICATION_ID + ":WAKE_LOCK_TAG";
    public MyWifiManager(){
        mWifiLock = ((WifiManager) App.getContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF ,"MyWifiManager:mWifiLock");
        PowerManager powerManager = (PowerManager) App.getContext().getSystemService(App.getContext().POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, TAG)
    }


    public void acquireWifiLock(){
        if (mWifiLock != null && !mWifiLock.isHeld()){
            mWifiLock.acquire();
        }
    }

    public void releaseWifiLock() {
        if( mWifiLock != null && mWifiLock.isHeld() ){
            mWifiLock.release();
        }
    }   

    public void acquireWakeLock(){
        if (wakeLock != null && !wakeLock.isHeld()){
            wakeLock.acquire();
        }
    }

    public void releaseWakeLock() {
        if( wakeLock != null && wakeLock.isHeld() ){
            wakeLock.release();
        }
    }   


这是我的清单文件

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE " />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

【问题讨论】:

  • 你为什么要重复权限?
  • 哦!这是WifiLock不起作用的唯一原因?
  • 不是你的问题

标签: android wifi android-wifi wifimanager


【解决方案1】:

试试这个:

WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF , "MyWifiLock");
        wifiLock.acquire();
        PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
        wakeLock.acquire();

并在onDestroy方法中释放锁:

if (wakeLock != null) {
            if (wakeLock.isHeld()) {
                wakeLock.release();
            }
        }
        if (wifiLock != null) {
            if (wifiLock.isHeld()) {
                wifiLock.release();
            }
        }

【讨论】:

  • 那是我的错误,我没有在描述中添加PowerManager的唤醒锁代码。现在更新了。
【解决方案2】:

WifiLock 有不同的用途。它用于保持 Wi-Fi 无线电开启,而不是用于锁定到特定网络。

参考:https://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多