安卓WifiLock在安卓上无法正常工作

3

我想在连接到一个接入点后锁定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" />


你为什么重复权限? - Lakhwinder Singh
哦!这就是WifiLock无法工作的唯一原因吗? - Mohammad Abu Bakar Hussain
not that for your problem - Lakhwinder Singh
2个回答

1

0

试试这个:

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的wake lock代码。现在已经更新了。 - Mohammad Abu Bakar Hussain

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