2

我目前在我的 Android 应用程序中监听 Wi-Fi 的变化,并且在大多数情况下它工作正常,但是当用户有设备时,设备处于空闲/睡眠模式,就像屏幕空白时一样。如果他们走进 Wi-Fi 区域并自动连接,在用户打开屏幕之前我不会明白意图。这不好,并导致对我的应用程序的投诉。任何人都可以帮助我为什么在屏幕唤醒之前我没有得到意图?

这是我的代码:

广播接收器:

public class WifiReciever extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent arg1) {

        String action = arg1.getAction();

        if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)){
            return;
        }                    

        if (!noConnectivity)
        {
            if (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)
            {
                //Handle connected case
                Log.e("E", "GOT CONNECTION"); 
            }
        }
        else
        {
            if (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)
            {
                //Handle disconnected case
                Log.e("E", "LOST CONNECTION");
            }
        }

    }

如果一个正在运行的服务我把它作为一个变量:

WifiReciever mConnectionReceiver;

我通过以下调用启动和停止服务中的接收器:

private synchronized void startMonitoringConnection()
{       
    IntentFilter aFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);   
    registerReceiver(mConnectionReceiver, aFilter);
}

private synchronized void stopMonitoringConnection()
{     
    unregisterReceiver(mConnectionReceiver);
}

我调用 WakeLock 以确保我得到这样的 CPU 时间:

pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CicCPULock");
wl.acquire();

但是,即使屏幕为空白时我从未收到连接更改意图,但如果我用户走进 Wi-Fi 区域并在屏幕为空白时连接,它在屏幕开启的情况下 100% 工作我没有得到意图,有人知道我错过了什么吗?

4

1 回答 1

1

实际上,Android 中的 WakeLocks、WIFI 和 WIFILocks 存在很多问题。首先检查您的 WIFI 政策,看看当屏幕变暗时会发生什么。它必须是“始终开启”。然后尝试获取 WIFI Lock 以防止 wifi 休眠,因为保持 CPU 开启不会导致 WIFI 关闭。有关示例代码,请参阅:

http://goltermann.cc/2011/11/android-accessing-wifi-even-in-standby-using-wakelock-wifilock-alarmmanager-and-services/

另请注意,您必须拥有使用 WakkeLocks 的权限:

    <uses-permission android:name="android.permission.WAKE_LOCK" />

这方面还有很多其他问题检查这个问题,并参考谷歌问题跟踪器关于WIFI问题,它帮助你很多,节省你很多时间:

Android奇怪的跨设备行为

于 2013-07-08T11:08:26.697 回答