CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: con ben Thanks ricevuti nelle ultime 24 ore
Utente della settimana: megthebest con ben 6 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 18 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 1 su 1
Discussione:

WakeUp e WakeLock in TimerTask. Uso dei Flag

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid L'avatar di l30n4rd0


    Registrato dal
    Jan 2013
    Località
    Terni/Roma
    Messaggi
    447
    Smartphone
    HUAWEI Ascend G330 (U8825-1)

    Ringraziamenti
    67
    Ringraziato 72 volte in 53 Posts
    Predefinito

    WakeUp e WakeLock in TimerTask. Uso dei Flag

    Salve a tutti. Premetto che questa è la mia prima app. Praticamente è una webview con link preimpostati (in main_activity). Questa parte funziona tutta correttamente. Ho inserito poi un comando per far partire (o fermare se già attiva) una TimerTask che lancia un link ogni 15 minuti. La particolarità è che per far partire la TimerTask io posso impostargli di accendermi lo schermo e/o disabilitarmi la schermata di blocco. Fatto con WakeLockManager e Powermanager usando screen_bright_wake_lock e affini. Senza perdersi troppo in chiacchiere il codice funziona sul mio terminale con cyano11, sul tablet sempre con cyano11, su un nexus5 "verginello"... Il problema nasce con l'emulatore, e con due dispositivi Samsung (s3 e tab2 con android 4.3 e 4.2.2) della mia ragazza (che al momento non ho a portata di mano e mi fido di quello che mi dice lei...
    Nell'emulatore (con 4.2.2, 4.3 e 4.4) per esempio una volta che si è spento lo schermo, non si riaccende più. Avendo visto che i comandi sono "deprecated" in API 17 (guarda caso android 4.2.2) ho deciso di usare le flag, ma non sono stato capace poi di farlo funzionare. Sotto metto il codice originale funzionante sul mio dispositivo.

    In pratica dovrei sostituire tutti i wlmanager e wlmanager2.

     
    1
    2
    import java.util.Random;
    3
    import java.util.Timer;
    4
    import java.util.TimerTask;
    5
    6
    import android.app.Activity;
    7
    import android.util.Log;
    8
    import android.webkit.WebView;
    9
    10
    public class ReloadWebView extends TimerTask {
    11
        private final Activity context;
    12
        private final WebView wv;
    13
        private Timer timer;
    14
        int seconds;
    15
        boolean screen;
    16
        boolean key;
    17
        
    18
    19
        public ReloadWebView(Activity context, int seconds, boolean kl, boolean lux, WebView wv) {
    20
            this.context = context;
    21
            this.wv = wv;
    22
            this.seconds = seconds;
    23
            this.key = kl;
    24
            this.screen = lux;
    25
            
    26
        }
    27
        
    28
        public void startTimer() {
    29
            // Don't start this timer twice
    30
            if(timer == null) {
    31
                timer = new Timer();
    32
                timer.schedule(this, 0, (seconds + (15 + new Random().nextInt(15))) * 1000);
    33
                Log.v("ReloadWebView", "Richiamato startTimer()");
    34
            }
    35
        }
    36
    37
        @Override
    38
        public void run() {
    39
            if(context != null) {
    40
                context.runOnUiThread(new Runnable() {
    41
                    @Override
    42
                    public void run() {
    43
                        // Screen on
    44
                        if (screen == true) {                                           
    45
                            WakeLockManager wlmanager = new WakeLockManager(ReloadWebView.this.context);
    46
                                                    // partial wakeup
    47
                            wlmanager.acquire();
    48
                                                    // disabilita blocco schermo
    49
                            wlmanager.disablekeyguard();
    50
                                                    // full wake up
    51
                            wlmanager.wakeup();
    52
                            wv.loadUrl("https://www.mousehuntgame.com/turn.php");
    53
                            Log.v("ReloadWebView", "Richiamato url");
    54
                            // With keyguard
    55
                            if (key == false) {                         
    56
                                // release della schermata di blocco
    57
                                wlmanager.enablekeyguard();
    58
                                // release del full wakeup
    59
                                wlmanager.release1();
    60
                                Log.v("ReloadWebView", "Richiamato WakeLockManager() 1");
    61
                            }
    62
                            // Without keyguard
    63
                            else if (key == true) {
    64
                                wlmanager.release1();
    65
                                Log.v("ReloadWebView", "Richiamato WakeLockManager() 2");
    66
                            }
    67
                        }
    68
                        // Screen off
    69
                        else if (screen == false) {
    70
                            WakeLockManager wlmanager2 = new WakeLockManager(ReloadWebView.this.context);
    71
                            wlmanager2.acquire();
    72
                            wlmanager2.disablekeyguard();
    73
                            wv.loadUrl("https://www.mousehuntgame.com/turn.php");
    74
                            Log.v("ReloadWebView", "Richiamato url");
    75
                            // With keyguard
    76
                            if (key == false) {
    77
                                Log.v("ReloadWebView", "Richiamato WakeLockManager() 3");
    78
                            }
    79
                            // Without keyguard
    80
                            else if (key == true) {
    81
                                wlmanager2.enablekeyguard();
    82
                                Log.v("ReloadWebView", "Richiamato WakeLockManager() 4");
    83
                            }
    84
                        }
    85
                    }
    86
                });
    87
            }
    88
        }
    89
        
    90
        public void stopTimer() {
    91
            if(timer != null) {
    92
                timer.cancel();
    93
                timer.purge();
    94
                timer = null;
    95
                this.timer = null;
    96
                this.cancel();
    97
                Log.v("ReloadWebView", "Richiamato stopTimer()");
    98
            }
    99
        }
    100
        
    101
    }
    102


    Questa è la classe wakelockmanager:

    74
     
    1
    2
    import android.app.KeyguardManager;
    3
    import android.app.KeyguardManager.KeyguardLock;
    4
    import android.content.Context;
    5
    import android.os.PowerManager;
    6
    import android.os.PowerManager.WakeLock;
    7
    import android.util.Log;
    8
    9
    public class WakeLockManager {
    10
        public final WakeLock fullWakeLock;
    11
        public final WakeLock partialWakeLock;
    12
        public final KeyguardLock keyguardLock;
    13
        private static WakeLockManager singleton = null;
    14
    15
        public WakeLockManager(Context context) {
    16
            PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    17
            fullWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "Loneworker - FULL WAKE LOCK");
    18
            partialWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Loneworker - PARTIAL WAKE LOCK");
    19
            KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    20
            keyguardLock = keyguardManager.newKeyguardLock("TAG");
    21
        }
    22
        
    23
        public static WakeLockManager getInstance() {
    24
            if(singleton == null) {
    25
                singleton = new WakeLockManager(null);
    26
            }
    27
            Log.v("WakeLockManager", "Richiamato singleton");
    28
            return singleton;
    29
        }
    30
        
    31
        // Acquire partial wake lock only
    32
        public void acquire() {
    33
            partialWakeLock.acquire();
    34
            Log.v("WakeLockManager", "Richiamato WakeLockManager() partialacquire");
    35
        }
    36
        
    37
        // Disable keyguardlock
    38
        public void disablekeyguard(){
    39
            keyguardLock.disableKeyguard();
    40
            Log.v("WakeLockManager", "Richiamato WakeLockManager() disablekeyguard");
    41
        }
    42
        
    43
        // Release keyguardlock
    44
        public void enablekeyguard() {
    45
            keyguardLock.reenableKeyguard();
    46
            Log.v("WakeLockManager", "Richiamato WakeLockManager() enablekeyguard");
    47
        }
    48
        
    49
        // Called whenever we need to wake up the device. This also acquires a
    50
        // full wake lock.
    51
        public void wakeup() {
    52
            fullWakeLock.acquire();
    53
            Log.v("WakeLockManager", "Richiamato WakeLockManager() fullacquire");
    54
        }
    55
        
    56
        // Release all the acquired wake locks
    57
        public void release1() {
    58
            if (fullWakeLock.isHeld()) {
    59
                fullWakeLock.release();
    60
                Log.v("WakeLockManager", "Richiamato WakeLockManager() fullrelease");
    61
            }
    62
        }
    63
        
    64
        
    65
        // Release partial
    66
        public void release2() {
    67
            if (partialWakeLock.isHeld()) {
    68
                partialWakeLock.release();
    69
                Log.v("WakeLockManager", "Richiamato WakeLockManager() partialrelase");
    70
            }
    71
        }
    72
        
    73
    }
    74


    Ho provato una formula tipo questa, ma non ha funzionato...

    4
     
    1
    2
    context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    3
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    4
    Smartphone: Huawei Ascend G330 (U8825-1)
    ROM: CyanogenMod 11
    Recovery: TWRP 2.7.1.0
    Root: Done
    Unloock bootloader: Done

    Tablet: Nexus 7 3G 32 GB
    ROM: CyanogenMod 11 for Tilapia
    Recovery: TWRP 2.6.3.0
    Root: Done
    Unloock bootloader: Done

  2.  

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy