Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Windows 10, puedes usar el acceso asignado para crear un dispositivo de pantalla completa, lo que permite a los usuarios interactuar con una sola aplicación universal de Windows. En este artículo se describe cómo implementar una aplicación de pantalla completa y procedimientos recomendados.
Hay dos experiencias diferentes que proporciona el acceso asignado:
La experiencia de kiosco de una sola aplicación
Asigne una aplicación a una cuenta. Cuando un usuario inicia sesión, solo tiene acceso a esta aplicación y nada más en el sistema. Durante este tiempo, el dispositivo quiosco está bloqueado, con la aplicación de quiosco ejecutándose encima de la pantalla de bloqueo. Esta experiencia se usa a menudo para las máquinas de quiosco accesibles desde el público. consulta Configurar un quiosco multimedia en Windows 10 Pro, Enterprise o Education para obtener más información.
La experiencia de pantalla completa de varias aplicaciones (disponible en Windows 10, versión 1709 y posteriores)
Puede asignar una o varias aplicaciones a una cuenta. Cuando un usuario inicia sesión, el dispositivo se inicia en una experiencia de shell restringida con acceso solo a las aplicaciones seleccionadas. Consulta Crear un quiosco de Windows 10 que ejecute varias aplicaciones para obtener más información.
En este artículo se describe solo la experiencia de pantalla completa de una sola aplicación. En la experiencia de varias aplicaciones, las aplicaciones seleccionadas se ejecutan en un contexto de escritorio normal y no requieren ningún control ni modificación especiales.
Términos
Término | Descripción |
---|---|
acceso asignado | Característica que permite a un administrador del sistema administrar la experiencia del usuario limitando los puntos de entrada de aplicación expuestos al usuario del dispositivo. Por ejemplo, puedes restringir a los clientes de tu empresa a usar una aplicación para que tu PC actúe como un quiosco. Siempre que alguien inicie sesión con la cuenta especificada, solo podrá usar esa aplicación. No pueden cambiar las aplicaciones ni cerrar la aplicación mediante gestos táctiles, un mouse, el teclado o los botones de hardware. Tampoco verán ninguna notificación de aplicación. |
aplicación de pantalla de bloqueo (o aplicación de bloqueo) | Una aplicación que aprovecha la capacidad de establecer un fondo de pantalla dinámico o que aprovecha el nuevo marco de extensibilidad de bloqueos. |
aplicación de pantalla de bloqueo anterior (o aplicación de bloqueo superior) | Una aplicación que se inicia encima de la pantalla de bloqueo mientras se ejecuta la aplicación de pantalla de bloqueo (por ejemplo, cuando el escritorio está bloqueado). |
en la aplicación de bloqueo | Una aplicación que se ejecuta normalmente, en un contexto de Windows desbloqueado. |
LockApplicationHost | Una clase WinRT que permite a las aplicaciones que operan por encima de la pantalla de bloqueo solicitar que el dispositivo se desbloquee y permite que la aplicación se registre para ser notificada cuando el dispositivo comience a desbloquearse. |
Vista o vista de aplicación | Cada vista es una ventana independiente en la aplicación. Una aplicación puede tener una vista principal y crear varias vistas secundarias a petición. Consulte ApplicationView para obtener más información. |
La extensión "windows.aboveLockScreen"
El acceso asignado en Windows 10 usa el marco de bloqueo. Cuando un usuario de acceso asignado inicia sesión, una tarea en segundo plano bloquea el escritorio e inicia la aplicación de quiosco sobre la pantalla de bloqueo. El comportamiento de la aplicación puede diferir, en función de si usa la extensión windows.aboveLockScreen.
El uso de windows.aboveLockScreen permite que la aplicación de quiosco acceda a la clase en tiempo de ejecución LockApplicationHost, lo que permite a la aplicación saber cuándo se ejecuta por encima del bloqueo (y, por tanto, ejecutarse como una experiencia de quiosco). Si no se puede devolver una instancia, la aplicación se ejecuta en un contexto de escritorio normal.
Cuando el marco de bloqueo inicia la aplicación de quiosco encima de la pantalla de bloqueo y la aplicación tiene la extensión windows.aboveLockScreen, el marco de bloqueo crea automáticamente una nueva vista secundaria por encima de la pantalla de bloqueo. La vista principal se encuentra bajo el bloqueo. Esta vista secundaria contiene el contenido de la aplicación y es lo que ve el usuario. Esta vista se puede usar con la extensión para personalizar la experiencia de kiosco. Por ejemplo, puede hacer lo siguiente:
Proteja la experiencia de quiosco creando una página independiente para mostrar contenido solo para quioscos.
Llama al método LockApplicationHost.RequestUnlock() de la aplicación para salir del modo de acceso asignado y volver a la pantalla de inicio de sesión.
Agregue un controlador de eventos al evento LockApplicationHost.Unlocking que se desencadena cuando un usuario presiona Ctrl+Alt+Supr para salir de la experiencia de quiosco. El controlador también se puede usar para guardar los datos antes de salir.
Si la aplicación no tiene la extensión windows.aboveLockScreen , no se crea ninguna vista secundaria y la aplicación se inicia como si estuviera ejecutándose normalmente. Además, dado que la aplicación no tendrá acceso a una instancia de LockApplicationHost, no podrá determinar si se ejecuta en un contexto normal o para una experiencia de pantalla completa. No incluir la extensión tiene ventajas, como poder admitir varios monitores.
Independientemente de si la aplicación usa la extensión, asegúrese de proteger sus datos. Consulte las instrucciones para aplicaciones de acceso asignadas para obtener más información.
A partir de Windows 10, versión 1607, ya no hay ninguna restricción en la extensión de la Plataforma universal de Windows (UWP), por lo que la mayoría de las aplicaciones se pueden mostrar en Configuración cuando el usuario configura el acceso asignado.
procedimientos recomendados
Esta sección se aplica a una aplicación kiosk que usa la extensión windows.aboveLockScreen .
Protección de la información
Si la aplicación de quiosco está pensada para ejecutarse tanto por encima del bloqueo en acceso asignado como en el contexto de Windows desbloqueado, puede que desee crear una página diferente para mostrar por encima del bloqueo y otra página para mostrar bajo el bloqueo. Esto le permite evitar mostrar información confidencial en modo de pantalla completa, ya que el modo de pantalla completa normalmente significa acceso anónimo. Estos son los pasos que seguiría para usar dos páginas diferentes, una para bajo el bloqueo y otra para encima del bloqueo:
Dentro de la sobrescritura de la función OnLaunched en App.xaml.cs, intente obtener una instancia de la clase LockApplicationHost antes de la navegación del marcoRaíz.
Si se produce un error en la llamada, la aplicación del quiosco debería iniciarse normalmente, a pesar del bloqueo.
Si la llamada se realiza correctamente, la aplicación quiosco debe iniciarse sobre la pantalla de bloqueo y funcionar en modo de acceso asignado. Es posible que quieras que esta versión de la aplicación de pantalla completa tenga otra página principal para ocultar información confidencial.
En el ejemplo siguiente se muestra cómo hacerlo. AssignedAccessPage.xaml está predefinida, y la aplicación navega a AssignedAccessPage.xaml una vez que detecta que se ejecuta en modo por encima del bloqueo. Como resultado, la página normal solo se mostraría en el escenario de bloqueo.
Puede usar este método para determinar si la aplicación se ejecuta por encima de la pantalla de bloqueo en cualquier momento del ciclo de vida de la aplicación y reaccionar en consecuencia.
using Windows.ApplicationModel.LockScreen;
// inside the override OnLaunched function in App.xaml.cs
if (rootFrame.Content == null)
{
LockApplicationHost host = LockApplicationHost.GetForCurrentView();
if (host == null)
{
// if call to LockApplicationHost is null, this app is running under lock
// render MainPage normally
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
else
{
// If LockApplicationHost was successfully obtained
// this app is running as a lock screen app, or above lock screen app
// render a different page for assigned access use
// to avoid showing regular main page to keep secure information safe
rootFrame.Navigate(typeof(AssignedAccessPage), e.Arguments);
}
}
Varias vistas, ventanas y subprocesos
A partir de Windows 10, versión 1803, se admiten varias vistas en la experiencia de pantalla completa para las aplicaciones que no tienen la extensión windows.aboveLockScreen . Para usar varias vistas, asegúrese de que la opción Varias pantallas del dispositivo de pantalla completa está establecida en Extender estas pantallas.
Cuando se inicia una aplicación con varias vistas (y sin windows.aboveLockScreen) durante una experiencia de pantalla completa, la vista principal de la aplicación se representará en el primer monitor. Si la aplicación crea una nueva vista mediante CreateNewView(), se representa en el segundo monitor. Si la aplicación crea otra vista, irá al tercer monitor, etc.
Importante
Los dispositivos de quiosco solo pueden mostrar una vista por monitor. Por ejemplo, si el dispositivo de quiosco solo tiene un monitor, siempre mostrará la vista principal de la aplicación de quiosco. No se mostrarán nuevas vistas creadas por la aplicación.
Cuando una aplicación de quiosco tiene la extensión windows.aboveLockScreen y se ejecuta por encima de la pantalla de bloqueo, se inicializa de forma diferente. Su vista principal se encuentra debajo de la cerradura, con una vista secundaria encima de esta. Esta vista secundaria es lo que ve el usuario. Aunque no cree explícitamente ninguna nueva vista, seguirá teniendo dos vistas en la instancia de la aplicación.
Puedes ejecutar el código siguiente en la ventana principal de la aplicación (en modo de acceso asignado) para ver el recuento de vistas y si la pantalla actual es la vista principal.
using Windows.ApplicationModel.Core;
CoreApplication.GetCurrentView().IsMain //false
CoreApplication.Views.Count //2
Distribuidor
Cada vista o ventana tiene su propio despachador. Dado que la vista principal está oculta al usuario, use GetCurrentView() para acceder a la vista secundaria de la aplicación que se ejecuta encima del bloqueo en lugar de MainView().
using Windows.ApplicationModel.Core;
private async void Button_Click(object sender, RoutedEventArgs e)
{
button.IsEnabled = false;
// start a background task and update UI periodically (every 1 second)
// using MainView dispatcher in below code will end up with app crash
// in assigned access mode, use GetCurrentView().Dispatcher instead
await CoreApplication.GetCurrentView().Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
async () =>
{
for (int i = 0; i < 60; ++i)
{
// do some background work, here we use Task.Delay to sleep
await Task.Delay(1000);
// update UI
textBlock1.Text = " " + i.ToString();
}
button.IsEnabled = true;
});
}
Cuando la aplicación tiene windows.aboveLockScreen y se ejecuta en modo quiosco, la creación de vistas nuevas provocará una excepción dentro de la aplicación.
Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception
Debido a esto, no puede tener varias vistas ni ejecutarse en varios monitores. Si la aplicación necesita admitir cualquiera de las dos opciones, debe quitar la extensión windows.aboveLockScreen de la aplicación.
Adición de una forma de salir del acceso asignado
En algunas situaciones, es posible que el botón de encendido, el botón de escape u otros botones usados para detener una aplicación no estén habilitados o disponibles en el teclado. En estas situaciones, proporcione una manera de detener el acceso asignado, por ejemplo, una clave de software. El siguiente controlador de eventos muestra cómo detener el modo de acceso asignado respondiendo al evento de selección de botón que podría desencadenar una clave de software.
LockApplicationHost^ lockHost = LockApplicationHost::GetForCurrentView();
if (lockHost != nullptr)
{
lockHost->RequestUnlock();
}
Administración del ciclo de vida
El marco de acceso asignado controla el ciclo de vida de una aplicación de kiosco. Si la aplicación finaliza inesperadamente, el marco intenta volver a iniciarla. Sin embargo, si un usuario presiona Ctrl+Alt+Supr para abrir la pantalla de inicio de sesión, se desencadena un evento de desbloqueo. El marco de acceso asignado escucha el evento y intentará finalizar la aplicación.
Tu aplicación de quiosco también puede registrar un controlador para este evento y realizar acciones antes de salir. Guardar los datos es un ejemplo de esto. Consulte el código siguiente para obtener un ejemplo de registro de un controlador.
using Windows.ApplicationModel.LockScreen;
public AssignedAccessPage()
{
this.InitializeComponent();
LockApplicationHost lockHost = LockApplicationHost.GetForCurrentView();
if (lockHost != null)
{
lockHost.Unlocking += LockHost_Unlocking;
}
}
private void LockHost_Unlocking(LockApplicationHost sender, LockScreenUnlockingEventArgs args)
{
// save any unsaved work and gracefully exit the app
App.Current.Exit();
}
Después de que el usuario presione Ctrl+Alt+Supr y se muestre una pantalla de inicio de sesión, pueden ocurrir dos cosas:
El usuario conoce la contraseña de la cuenta de acceso asignada y desbloquea el escritorio. El marco de acceso asignado se inicia, bloquea el escritorio, y la aplicación de pantalla de bloqueo se lanza, la cual a su vez lanza la aplicación de quiosco.
El usuario no conoce la contraseña o no realiza ninguna acción adicional. La pantalla de inicio de sesión se agota el tiempo y el escritorio se relockea; la aplicación de pantalla de bloqueo se inicia, lo que a su vez inicia la aplicación de quiosco.
No cree nuevas ventanas ni vistas en modo de acceso asignado
La siguiente llamada de función termina con una excepción en tiempo de ejecución si se invoca en modo de acceso asignado. Si la misma aplicación, cuando se usa en modo bloqueado, llama a la función, no produce una excepción en tiempo de ejecución. Resulta útil usar LockApplicationHost para determinar el modo de acceso asignado de la aplicación y codificar la aplicación en consecuencia, como no crear nuevas vistas si la aplicación está en modo de acceso asignado.
Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception
Apéndice 1: Extensión para UWP
El siguiente manifiesto de aplicación de ejemplo usa la extensión windows.aboveLockScreenpara UWP.
A partir de Windows 10, versión 1607, ya no hay ninguna restricción en la extensión de la Plataforma universal de Windows (UWP), por lo que la mayoría de las aplicaciones se pueden mostrar en Configuración cuando el usuario configura el acceso asignado.
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
<Identity Name="bd4df68b-dc18-4748-a14e-bc21dac13736" Publisher="Contoso" Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="bd4df68b-dc18-4748-a14e-bc21dac13736" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>AboveLock</DisplayName>
<PublisherDisplayName>Contoso</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AboveLock.App">
<uap:VisualElements DisplayName="AboveLock" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="AboveLock" BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<uap:Extension Category="windows.lockScreenCall" />
<uap:Extension Category="windows.aboveLockScreen" />
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
</Capabilities>
</Package>
Apéndice 2: Solución de problemas
Normalmente, si una aplicación de pantalla completa no se activa encima de la aplicación de pantalla de bloqueo, puede encontrar el código de error de activación en la pantalla de bloqueo. Use el código de error para detectar el problema mediante la búsqueda de códigos de error del sistema de Windows. Además, el Visor de eventos contiene más información sobre los errores de activación. Para ello:
Abra Visor de eventos. Hay dos lugares probables para encontrar errores de activación.
En el panel Visor de eventos (local), expanda Registros de Windows y, a continuación, seleccione Aplicación.
Además, en Visor de eventos (local), expanda Registros de aplicaciones y servicios, expanda Windows, expanda Aplicaciones y, a continuación, seleccione Microsoft-Windows-TWinUI/Operational.
Dado que las aplicaciones quiosco con acceso asignado no se ejecutan en modo de pantalla completa, ApplicationView.GetForCurrentView().IsFullScreenMode devuelve false.