[#WINDOWSPHONE] Evitar que la pantalla se bloquee automáticamente

Tal vez os haya surgido la necesidad de evitar el bloqueo automático de pantalla al ejecutar cierto código en una aplicación, siendo los ejemplos más recurrentes sistemas de navegación o reproductores de vídeo: en Windows Phone esto es posible con tan sólo una línea de código (tanto en WP 7.x como en WP 8).

Es algo que se puede solucionar fácilmente con una búsqueda en [introduce aquí tu buscador favorito]…o más fácil aún, observando el código autogenerado en el archivo App.xaml.cs de cualquier proyecto de Windows Phone, en la última línea del constructor: 

 C# |  copy code |? 
  1.         public App()
  2.         {
  3.             // Global handler for uncaught exceptions.
  4.             UnhandledException += Application_UnhandledException;
  5.             // Standard XAML initialization
  6.             InitializeComponent();
  7.             // Phone-specific initialization
  8.             InitializePhoneApplication();
  9.             // Language display initialization
  10.             InitializeLanguage();
  11.             // Show graphics profiling information while debugging.
  12.             if (Debugger.IsAttached)
  13.             {
  14.                 // Display the current frame rate counters.
  15.                 Application.Current.Host.Settings.EnableFrameRateCounter = true;
  16.                 // Show the areas of the app that are being redrawn in each frame.
  17.                 //Application.Current.Host.Settings.EnableRedrawRegions = true;
  18.                 // Enable non-production analysis visualization mode,
  19.                 // which shows areas of a page that are handed off to GPU with a colored overlay.
  20.                 //Application.Current.Host.Settings.EnableCacheVisualization = true;
  21.                 // Prevent the screen from turning off while under the debugger by disabling
  22.                 // the application's idle detection.
  23.                 // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
  24.                 // and consume battery power when the user is not using the phone.
  25.                 PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
  26.             }
  27.         }

Donde sólo lo tienen habilitado en el proceso de depuración. Pero podemos hacerlo sin problema en nuestra app añadiendo esa línea antes del código que necesita evitar el bloqueo automático de pantalla durante su ejecución, volviendo a habilitarla al terminar:

 C# |  copy code |? 
  1. public void metodoAntiBloqueo()
  2. {
  3.             // código
  4.             // código
  5.             // ...
  6.             // ...
  7.             PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;
  8.             // código que evitará el bloqueo automatico de la pantalla
  9.             PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Enabled;
  10.             // resto del código
  11.             // ...
  12.             // ...
  13. }

Todo esto incluyendo

 C# |  copy code |? 
  1. using Microsoft.Phone.Shell;

Cortito y muy sencillo, pero espero que útil :)

Gk out

About Gorka Madariaga

Media Apps Dev en Plain Concepts, ex-Microsoft en el equipo de DPE/DX y parte del equipo de @TrackSeriesTv. Basketball coach-player-lover. Hay quien dice que soy de acero.