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
2import java.util.Random;
3import java.util.Timer;
4import java.util.TimerTask;
5
6import android.app.Activity;
7import android.util.Log;
8import android.webkit.WebView;
9
10public class ReloadWebView extends TimerTask {
11private final Activity context;
12private final WebView wv;
13private Timer timer;
14int seconds;
15boolean screen;
16boolean key;
17
18
19public ReloadWebView(Activity context, int seconds, boolean kl, boolean lux, WebView wv) {
20this.context = context;
21this.wv = wv;
22this.seconds = seconds;
23this.key = kl;
24this.screen = lux;
25
26}
27
28public void startTimer() {
29// Don't start this timer twice
30if(timer == null) {
31timer = new Timer();
32timer.schedule(this, 0, (seconds + (15 + new Random().nextInt(15))) * 1000);
33Log.v("ReloadWebView", "Richiamato startTimer()");
34}
35}
36
37
38public void run() {
39if(context != null) {
40context.runOnUiThread(new Runnable() {
41
42public void run() {
43// Screen on
44if (screen == true) {
45WakeLockManager wlmanager = new WakeLockManager(ReloadWebView.this.context);
46// partial wakeup
47wlmanager.acquire();
48// disabilita blocco schermo
49wlmanager.disablekeyguard();
50// full wake up
51wlmanager.wakeup();
52wv.loadUrl("https://www.mousehuntgame.com/turn.php");
53Log.v("ReloadWebView", "Richiamato url");
54// With keyguard
55if (key == false) {
56// release della schermata di blocco
57wlmanager.enablekeyguard();
58// release del full wakeup
59wlmanager.release1();
60Log.v("ReloadWebView", "Richiamato WakeLockManager() 1");
61}
62// Without keyguard
63else if (key == true) {
64wlmanager.release1();
65Log.v("ReloadWebView", "Richiamato WakeLockManager() 2");
66}
67}
68// Screen off
69else if (screen == false) {
70WakeLockManager wlmanager2 = new WakeLockManager(ReloadWebView.this.context);
71wlmanager2.acquire();
72wlmanager2.disablekeyguard();
73wv.loadUrl("https://www.mousehuntgame.com/turn.php");
74Log.v("ReloadWebView", "Richiamato url");
75// With keyguard
76if (key == false) {
77Log.v("ReloadWebView", "Richiamato WakeLockManager() 3");
78}
79// Without keyguard
80else if (key == true) {
81wlmanager2.enablekeyguard();
82Log.v("ReloadWebView", "Richiamato WakeLockManager() 4");
83}
84}
85}
86});
87}
88}
89
90public void stopTimer() {
91if(timer != null) {
92timer.cancel();
93timer.purge();
94timer = null;
95this.timer = null;
96this.cancel();
97Log.v("ReloadWebView", "Richiamato stopTimer()");
98}
99}
100
101}
102
Questa è la classe wakelockmanager:
741
2import android.app.KeyguardManager;
3import android.app.KeyguardManager.KeyguardLock;
4import android.content.Context;
5import android.os.PowerManager;
6import android.os.PowerManager.WakeLock;
7import android.util.Log;
8
9public class WakeLockManager {
10public final WakeLock fullWakeLock;
11public final WakeLock partialWakeLock;
12public final KeyguardLock keyguardLock;
13private static WakeLockManager singleton = null;
14
15public WakeLockManager(Context context) {
16PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
17fullWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "Loneworker - FULL WAKE LOCK");
18partialWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Loneworker - PARTIAL WAKE LOCK");
19KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
20keyguardLock = keyguardManager.newKeyguardLock("TAG");
21}
22
23public static WakeLockManager getInstance() {
24if(singleton == null) {
25singleton = new WakeLockManager(null);
26}
27Log.v("WakeLockManager", "Richiamato singleton");
28return singleton;
29}
30
31// Acquire partial wake lock only
32public void acquire() {
33partialWakeLock.acquire();
34Log.v("WakeLockManager", "Richiamato WakeLockManager() partialacquire");
35}
36
37// Disable keyguardlock
38public void disablekeyguard(){
39keyguardLock.disableKeyguard();
40Log.v("WakeLockManager", "Richiamato WakeLockManager() disablekeyguard");
41}
42
43// Release keyguardlock
44public void enablekeyguard() {
45keyguardLock.reenableKeyguard();
46Log.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.
51public void wakeup() {
52fullWakeLock.acquire();
53Log.v("WakeLockManager", "Richiamato WakeLockManager() fullacquire");
54}
55
56// Release all the acquired wake locks
57public void release1() {
58if (fullWakeLock.isHeld()) {
59fullWakeLock.release();
60Log.v("WakeLockManager", "Richiamato WakeLockManager() fullrelease");
61}
62}
63
64
65// Release partial
66public void release2() {
67if (partialWakeLock.isHeld()) {
68partialWakeLock.release();
69Log.v("WakeLockManager", "Richiamato WakeLockManager() partialrelase");
70}
71}
72
73}
74
Ho provato una formula tipo questa, ma non ha funzionato...
41
2context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
3WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
4