Android - не получать намерение изменить подключение к Wi-Fi, когда экран устройства пуст

В настоящее время я слушаю изменения в Wi-Fi в своем приложении для Android, и по большей части он работает нормально, однако, когда у пользователя есть устройство, оно находится в режиме ожидания/спящего режима, например, когда экран пустой. Если они входят в зону 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, чтобы убедиться, что я получаю процессорное время следующим образом:

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

Однако даже при всем этом я никогда не получаю сообщение об изменении намерения подключения, если экран пуст, он работает в 100% случаев, когда экран включен, если пользователь заходит в сеть Wi-Fi и подключается, когда экран пуст. не удается понять намерение, кто-нибудь знает, что я что-то упускаю?


person Donal Rafferty    schedule 26.10.2012    source источник


Ответы (1)


На самом деле проблем с WakeLocks, WIFI и WIFILocks в Android много. Прежде всего, проверьте свою политику WIFI, чтобы узнать, что произойдет, когда экран погаснет. Он должен быть «Всегда включен». Затем попытайтесь получить блокировку WIFI, чтобы предотвратить спящий режим Wi-Fi, потому что включение процессора не приводит к отключению 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 на разных устройствах

person gst    schedule 08.07.2013