简体   繁体   English

Android WifiLock在Android上无法正常工作

[英]Android WifiLock is not working correctly on Android

I'm trying to lock wifi after connected to an access point but device switch to another network after 2 to 3 minutes. 连接到接入点后,我试图锁定wifi,但是2到3分钟后设备切换到另一个网络。 Here is how I'm trying to do. 这就是我想要做的。


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


Here is my manifest file 这是我的清单文件

    <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" />

try this : 尝试这个 :

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();

And release the locks in onDestroy method: 并释放onDestroy方法中的锁:

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

WifiLock has a different purpose. WifiLock具有不同的用途。 It is used for keeping the Wi-Fi radio on and is not meant for locking to a particular network. 它用于使Wi-Fi无线电保持开启状态,而不是用于锁定特定网络。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM