Comment puis-je garder mon écran déverrouillé pendant le débogage USB?

Android OS2.2 avait une option sous Paramètres / Applications / Développement pour désactiver le locking de l’écran pendant le débogage USB. Après la mise à niveau de mon Samsung Galaxy S vers OS2.3.3, cette option a disparu et il est TRÈS frustrant de continuer à déverrouiller mon téléphone pendant le débogage.

Cette option a-t-elle été déplacée ou existe-t-il une autre façon de le faire? (Je déteste quand les options utiles sont supprimées sans raison!)

Merci d’avance…

Il existe plusieurs options, dont beaucoup ont des effets secondaires (subjectifs) HORRIBLES . Je vais énumérer ce que j’ai trouvé et quels effets secondaires je pourrais penser.

Je suis paresseuse, peut-être comme beaucoup d’autres, et je n’aime pas restr à l’affût de quelque chose d’inutile. Cela signifie que l’option “Oh, je vais juste allumer ceci pendant que je travaille et puis l’éteindre une fois terminé” n’est pas viable. Vous l’ oublierez et vous ressentirez les effets secondaires listés ci-dessous.

TL; DR

FLAG_KEEP_SCREEN_ON avec un garde FTW Debug.isDebuggerConnected() ! Restez éveillé lorsque vous chargez , le timeout de l’écran et le wake-lock sont des options non viables si vous souhaitez simplement déboguer.
Il y a aussi un avantage de cette solution qui fonctionne à partir d’API 1 ET du débogage wifi!

Paramètres> Options du développeur> Restez éveillé lorsque vous chargez

Burn in : Il devrait y avoir un énorme drapeau rouge si quelqu’un active. Il dit “en chargeant” pas “en déboguant”. Ce qui signifie que même si votre téléphone est branché sur le secteur, il continuera à fonctionner. Cela est particulièrement grave si vous avez un écran AMOLED (par exemple, la série Galaxy S) qui brûle des trucs. J’avais cette option pendant quelques semaines et maintenant j’ai une barre d’état de portrait permanente …

Notifications : Même si vous utilisez une faible luminosité et n’oubliez pas d’éteindre votre écran chaque fois que vous mettez le téléphone en panne, certaines applications réveillent votre écran si vous recevez une simple notification qui permet de le garder la plupart du temps lorsqu’il est branché dans.

Sécurité : Si vous laissez simplement votre écran allumé pendant le chargement et que vous avez besoin rapidement de quelque chose au travail, la première chose à faire ne sera pas “Ah, laissez-moi d’abord verrouiller mon téléphone”. ça marche Permettez-moi de noter que si vous travaillez dans un environnement où vous ne pouvez pas faire confiance à vos collègues, je reconsidérerais cet emploi.

Paramètres> Affichage> Délai d’expiration de l’écran

C’est très risqué si vous avez beaucoup d’applications qui vous donnent des notifications. Surtout si vous avez des spammeurs (Facebook, Family Guy ou même GMail si vous recevez beaucoup de mails).

Burn in : Le risque est élevé avec cela aussi. Maintenant, vous ne limitez même pas à “être sur le fil” donc il restra juste à chaque fois que vous oubliez de désactiver explicitement ou obtenir une notification.

Décharge de la batterie : Si vous en avez une, l’écran sera allumé pendant le laps de temps spécifié, vidant votre batterie. Et ce sera sur parce que parfois vous oubliez de l’éteindre ou recevez simplement une notification.

Hotpocket : si vous recevez une notification pendant que le téléphone est dans votre poche, l’éclairage de l’écran et de l’espace confiné réchauffera vos poches et vous risquez même de vous brûler.

Cadran de poche : si votre écran s’allume alors que le téléphone est dans votre poche, le risque d’un cadran de poche augmente avec chaque seconde. Aujourd’hui, cela est moins probable, car l’application Phone est généralement bien cachée, mais ma poche aime souvent changer la date ou lire mes emails.

Sécurité : imaginez que vous êtes dans un lieu public et que votre téléphone est sur la table, vos amis abuseront probablement de votre écran déverrouillé si vous vous retournez assez longtemps pour parler à quelqu’un ou faire une pause rapide. Surtout s’ils sont en état d’ébriété. De toute évidence, des délais plus courts réduisent ce risque.

Utiliser un sillage

Permission : Vous devrez append une autorisation android.permission.WAKE_LOCK éventuellement inutile à votre application (heureusement, il devrait être facile d’append uniquement des variantes de débogage grâce à la fusion de manifestes dans le plugin Gradle).

Codage : Vous devrez également gérer vous-même la libération du verrou et peut-être devrez-vous créer un service uniquement pour cela. J’aimerais noter ici que je n’ai pas encore utilisé cette fonctionnalité dans Android.

Inutile : Cela n’aide pas non plus à garder l’écran allumé, car il ne fait que réveiller le processeur. Voir la documentation

FLAG_KEEP_SCREEN_ON pendant qu’un débogueur est attaché

Si vous lisez la documentation de celui-ci, vous trouverez une approximation très proche de votre problème.

Codage : je ne peux penser qu’à l’inconvénient de devoir modifier du code, mais c’est extrêmement simple (en supposant que BaseActivity toutes vos autres activités):

 @Override protected void onResume() { super.onResume(); if (BuildConfig.DEBUG) { // don't even consider it otherwise if (Debug.isDebuggerConnected()) { Log.d("SCREEN", "Keeping screen on for debugging, detach debugger and force an onResume to turn it off."); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Log.d("SCREEN", "Keeping screen on for debugging is now deactivated."); } } } 

Pour l’utiliser, il vous suffit de joindre un débogueur, puis de laisser l’application (bouton Accueil / Tâches ou éteindre l’écran), puis d’y revenir pour déclencher onResume .

Selon ce que vous déboguez habituellement, cela peut valoir la peine de mettre ce qui précède dans onCreate pour qu’il s’enregistre plus tôt et, espérons-le, garde l’écran éveillé pendant le débogage du cycle de vie des activités avant onResume .

En général, je conseille d’utiliser Run au lieu de Debug lorsque vous essayez du code et de ne joindre le débogueur que lorsque vous avez trouvé quelque chose: cela rendra votre application décuplée plus rapidement et cette option sera la meilleure possible.

Essayez ceci dans le shell adb, même si cela ne semble pas fonctionner sur certains périphériques:

 svc power stayon usb 

J’ai Android version 2.3.6 et sous settings -> applications -> development il existe une option pour restr éveillé (c.-à-d. Que votre écran ne dort jamais) pendant qu’il est branché pour charger.

Jorge Cevallos a raison.

Pour Android 4 et supérieur:

  1. Allez dans Paramètres> À propos du téléphone
  2. Touchez plusieurs fois (environ 10 fois) sur “Build number”.
  3. Revenez ensuite au menu Sttings et vous trouverez les “Options développeur”
  4. Sous “Options du développeur”, vous verrez “restr éveillé en option”.

S’amuser.

J’ai créé une application à cet effet. Vous pouvez le rechercher sur Google Play “Keep Awake for Debugging”. Il gardera votre téléphone déverrouillé / écran uniquement lorsque le débogage ADB est activé. Il n’est pas limité à l’USB uniquement, il fonctionne également sur Wi-Fi.

J’ai eu le problème de la sampe. J’ai trouvé cette application pour garder l’écran déverrouillé lorsque le téléphone est connecté.

https://play.google.com/store/apps/details?id=com.gmail.developer.runks.enji

Sur console

  while true; do adb shell input keyevent mouse ; sleep 1 ; done 

Simple. Ajoutez simplement le code suivant à votre activité et votre écran s’allume UNIQUEMENT lorsque vous déboguez:

 @Override protected void onResume() { Log.d( tag, "onResume()" ); try { super.onResume(); if( BuildConfig.DEBUG && Debug.isDebuggerConnected() ) { Log.d("SCREEN", "Keeping screen on for debugging, detach debugger and force an onResume to turn it off."); getWindow().addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON ); } else { getWindow().clearFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON ); Log.d( "SCREEN", "Keeping screen on for debugging is now deactivated."); } } catch( Throwable t ) { Log.e( tag, "onResume() - Exception: " + t.getMessage(), t ); } } 
 # find out if screen is on works on android 5.0+ screenOn=`adb shell dumpsys power | grep "Display Power" | grep ON` if [ -z "$screenOn" ]; then echo "turning screen on" adb shell input keyevent KEYCODE_POWER # unlock by emulating slide up adb shell input touchscreen swipe 930 880 930 380 fi 

Remplacez 12345 par votre code de délocking. Ensuite, ce script shell déverrouille votre téléphone:

 adb shell input keyevent KEYCODE_WAKEUP # activate adb shell input touchscreen swipe 530 1420 530 1120 # swipe up adb shell input text 12345 # input password adb shell input keyevent 66 # press enter 

Vous ne devez jamais désactiver les fonctionnalités de sécurité sur votre téléphone (comme indiqué ci-dessus). Assurez-vous que personne ne peut lire ce fichier script non plus.

Vous pouvez simplement définir le délai d’affichage sur 30 minutes ou le désactiver. Cette option est sous: Paramètres / Affichage / Délai d’affichage

J’espère que cela aide.

Deux options me viennent à l’esprit:

  1. écrire une application qui forcera le délai d’expiration de l’écran à être très élevé. Utilisez SCREEN_OFF_TIMEOUT ou STAY_ON_WHILE_PLUGGED_IN .

  2. Si votre téléphone est enraciné et que vous êtes connecté au wifi sur le même réseau que l’ordinateur sur lequel vous êtes en train de développer, vous pouvez également profiter de cette merveilleuse application dotée d’une option de délai d’affichage: wifi adb .

J’ai 2 appareils avec Android 2.3.3 et ils ont tous deux cette option dans Paramètres / Applications / Développement et son appelé Stay Awake (Écran ne dormira jamais pendant la charge). Et l’un d’eux est Samsung Galaxy S.

J’ai aussi un appareil avec Android 2.2 (HTC Desire) et il a également les mêmes fonctionnalités au même endroit.

C’est bizarre que vous n’utilisez pas une ROM personnalisée?

Vous pouvez réactiver les options de développeur, les configurations désormais masquées:

1 – Allez dans Paramètres> À propos de> Informations sur le logiciel> Plus …

2 – Ensuite, touchez le numéro de build 7 fois, ce qui vous donnera un compte à rebours, puis vous direz «vous êtes maintenant développeur».

Et les options de développeur sont de retour!

Utilisez ceci dans votre manifeste:

  

et votre écran ne s’éteindra pas!