Estoy usando un proyecto portátil, así que no tengo acceso directo al código nativo.

Tengo una interfaz en mi proyecto que me permite acceder a objetos nativos en los proyectos de Android / iOS. Usamos esto principalmente para reproducir audio.

Android, por ejemplo, tiene cosas como

Window w = new Window();
w.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.KeepScreenOn);

Sin embargo, el problema principal sería acceder a un objeto Window. Podría pasar un objeto Xamarin.Forms.Page al código nativo, pero no habría forma (no creo) de enviarlo a un objeto Android Window nativo para acceder a las banderas.

¿Hay alguna manera de hacer esto con un proyecto portátil?

4
sosil 28 abr. 2017 a las 22:34

3 respuestas

La mejor respuesta

No puede hacer esto sin servicios o renderizadores específicos de la plataforma. Un proyecto portátil tendrá que llamar a un código específico de la plataforma para lograr esto.

Desde ese código específico de la plataforma, ya sea como DependencyService o Renderer, puede acceder al objeto Window a través de Forms.Context. El Forms.Context es tu Android Activity, a través del cual puedes alcanzar el objeto Window.

En Android funciona así:

Android.Views.Window window = (Forms.Context as Activity).Window;
window.SetFlags(WindowManagerFlags.KeepScreenOn);

En iOS puedes probar esto (Apple docs):

UIApplication.SharedApplication.IdleTimerDisabled = true;
12
Tim Klingeleers 1 may. 2017 a las 13:49

Para Xamarin Forms Android. Representa el archivo que incluí debajo del código

Window window = (Forms.Context as Activity).Window;
window.AddFlags(WindowManagerFlags.KeepScreenOn);
0
Kairat Koibagarov 11 feb. 2019 a las 04:47

Ahora hay un complemento que hace exactamente lo que escribió Time.

https://docs.microsoft.com/en-us/xamarin/essentials/screen-lock

El código fuente simple está aquí

https://github.com/xamarin/Essentials/tree/master/Xamarin.Essentials/ScreenLock

0
batmaci 14 nov. 2018 a las 17:30