Android - 当设备屏幕为空时,不接收Wifi连接更改意图

时间:2012-10-26 09:15:01

标签: android android-intent android-wifi android-wake-lock

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

这是我的代码:

BroadcastReciever:

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%工作,并且当屏幕连接时是空白我没有意图,是否有人意识到我失踪的东西?

1 个答案:

答案 0 :(得分:1)

实际上Android中的WakeLocks,WIFI和WIFILocks存在很多问题。首先检查您的WIFI政策,看看屏幕变暗时会发生什么。它必须是“永远在线”。然后尝试获取WIFI锁以防止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" />

此区域还有许多其他问题请查看此问题,并参考Google问题跟踪器了解WIFI问题,它可以帮助您节省大量时间并为您节省时间:

Android strange cross device behaviour