App in modalità tutto schermo per l'accesso assegnato: Procedure consigliate
In Windows 10 puoi usare l'accesso assegnato per creare un dispositivo in modalità tutto schermo, che consente agli utenti di interagire con una sola app di Windows universale. Questo articolo descrive come implementare un'app in modalità tutto schermo e le procedure consigliate.
Esistono due esperienze diverse che forniscono l'accesso assegnato:
Esperienza tutto schermo con app singola
Assegnare un'app a un account. Quando un utente accede, avrà accesso solo a questa app e nient'altro nel sistema. Durante questo periodo, il dispositivo in modalità tutto schermo è bloccato, con l'app tutto schermo in esecuzione sopra la schermata di blocco. Questa esperienza viene spesso usata per i computer in modalità tutto schermo pubblico. per altre informazioni, vedi Configurare un chiosco multimediale in Windows 10 Pro, Enterprise o Education .
Esperienza tutto schermo multi-app (disponibile in Windows 10, versione 1709 e successive)
È possibile assegnare una o più app a un account. Quando un utente accede, il dispositivo viene avviato in un'esperienza shell con restrizioni con accesso solo alle app selezionate. Per altre informazioni, vedi Creare un chiosco multimediale windows 10 che esegue più app .
Questo articolo descrive solo l'esperienza in modalità tutto schermo con app singola. Nell'esperienza multi-app, le app selezionate vengono eseguite in un contesto desktop normale e non richiedono alcuna gestione o modifica speciale.
Termini
Termine | Descrizione |
---|---|
accesso assegnato | Funzionalità che consente a un amministratore di sistema di gestire l'esperienza dell'utente limitando i punti di ingresso dell'applicazione esposti all'utente del dispositivo. Ad esempio, puoi limitare i clienti dell'azienda all'uso di un'app in modo che il PC funzioni come un chiosco multimediale. Ogni volta che un utente accede con l'account specificato, potrà usare solo tale app. Non potranno cambiare app o chiudere l'app usando movimenti di tocco, un mouse, la tastiera o i pulsanti hardware. Inoltre, non visualizzerà alcuna notifica dell'app. |
app della schermata di blocco (o blocco dell'app) | Un'applicazione che sfrutta la possibilità di impostare uno sfondo dinamico o che sfrutta il nuovo framework di estendibilità del blocco. |
sopra l'app della schermata di blocco (o sopra l'app di blocco) | Un'applicazione che viene avviata sopra la schermata di blocco mentre è in esecuzione l'app della schermata di blocco, ad esempio quando il desktop è bloccato. |
sotto l'app di blocco | Applicazione che viene eseguita normalmente, in un contesto di Windows sbloccato. |
LockApplicationHost | Classe WinRT che consente alle app della schermata di blocco sopra di richiedere lo sblocco del dispositivo e consente all'app di registrarsi per ricevere una notifica quando il dispositivo inizia a sbloccare. |
Visualizzare o visualizzare un'applicazione | Ogni visualizzazione è una finestra separata nell'app. Un'app può avere una visualizzazione principale e creare più visualizzazioni secondarie su richiesta. Per altre informazioni, vedere ApplicationView . |
Estensione windows.aboveLockScreen
L'accesso assegnato in Windows 10 usa il framework di blocco. Quando un utente di accesso assegnato accede, un'attività in background blocca il desktop e avvia l'app in modalità tutto schermo sopra il blocco. Il comportamento dell'app può variare a seconda che usi l'estensione windows.aboveLockScreen.
L'uso di windows.aboveLockScreen consente all'app in modalità tutto schermo di accedere alla classe di runtime LockApplicationHost , che consente all'app di sapere quando è in esecuzione sopra il blocco (e quindi in esecuzione come esperienza tutto schermo). Se non è possibile restituire un'istanza, l'app viene eseguita in un normale contesto desktop.
Quando il framework di blocco avvia l'app in modalità tutto schermo sopra il blocco e l'app ha l'estensione windows.aboveLockScreen , il framework di blocco crea automaticamente una nuova visualizzazione secondaria sopra il blocco. La visualizzazione principale si trova sotto il blocco. Questa visualizzazione secondaria contiene il contenuto dell'app ed essere ciò che l'utente vede. Questa visualizzazione aggiuntiva può essere usata con l'estensione per personalizzare l'esperienza in modalità tutto schermo. È ad esempio possibile:
Proteggere l'esperienza in modalità tutto schermo creando una pagina separata per visualizzare il contenuto solo in modalità tutto schermo.
Chiamare il metodo LockApplicationHost.RequestUnlock() dall'app per aggiungere un modo in uscita dalla modalità di accesso assegnato e tornare alla schermata di accesso.
Aggiungere un gestore eventi all'evento *LockApplicationHost.Unlocking che viene generato quando un utente preme CTRL+ALT+CANC per uscire dall'esperienza in modalità tutto schermo. È anche possibile usare il gestore per salvare i dati prima dell'uscita.
Se l'app non ha l'estensione windows.aboveLockScreen , non viene creata alcuna visualizzazione secondaria e l'app viene avviata come se fosse in esecuzione normalmente. Inoltre, poiché l'app non avrà accesso a un'istanza di LockApplicationHost, non sarà in grado di determinare se è in esecuzione in un contesto normale o per un'esperienza tutto schermo. L'estensione non include vantaggi, ad esempio la possibilità di supportare più monitor
Indipendentemente dal fatto che l'app usi l'estensione, assicurarsi di proteggere i dati. Per altre informazioni, vedere le linee guida per le app di accesso assegnate.
A partire da Windows 10 versione 1607, non esiste più una restrizione sull'estensione piattaforma UWP (Universal Windows Platform) (UWP), in modo che la maggior parte delle app possa essere visualizzata in Impostazioni quando l'utente configura l'accesso assegnato.
Procedure consigliate
Questa sezione si applica a un'applicazione tutto schermo che usa l'estensione windows.aboveLockScreen .
Proteggere le informazioni
Se l'app in modalità tutto schermo è destinata a eseguire sia il blocco precedente che l'accesso assegnato e anche nel contesto di Windows sbloccato, è possibile creare una pagina diversa per eseguire il rendering del blocco precedente e un'altra pagina per il blocco. Ciò consente di evitare di visualizzare informazioni riservate in modalità tutto schermo, perché in genere la modalità tutto schermo significa accesso anonimo. Ecco i passaggi da seguire per usare due pagine diverse, una per sotto il blocco e una per sopra il blocco:
All'interno dell'override della funzione OnLaunched in App.xaml.cs, provare a ottenere un'istanza della classe LockApplicationHost prima della navigazione rootFrame.
Se la chiamata non riesce, l'app in modalità tutto schermo dovrebbe essere avviata normalmente, sotto il blocco.
Se la chiamata ha esito positivo, l'app in modalità tutto schermo dovrebbe essere avviata sopra il blocco in esecuzione in modalità di accesso assegnato. È possibile che questa versione dell'app in modalità tutto schermo abbia una pagina principale diversa per nascondere le informazioni riservate.
L'esempio seguente illustra come eseguire questa operazione. AssignedAccessPage.xaml è predefinito e l'app passa a AssignedAccessPage.xaml dopo aver rilevato che è in esecuzione in modalità di blocco precedente. Di conseguenza, la pagina normale viene visualizzata solo nello scenario di blocco.
È possibile usare questo metodo per determinare se l'app è in esecuzione sopra la schermata di blocco in qualsiasi momento nel ciclo di vita dell'app e reagire di conseguenza.
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);
}
}
Visualizzazioni, finestre e thread multipli
A partire da Windows 10 versione 1803, nell'esperienza tutto schermo sono supportate più visualizzazioni per le app che non dispongono dell'estensione windows.aboveLockScreen . Per usare più visualizzazioni, assicurarsi che l'opzione Multiple display del dispositivo in modalità tutto schermo sia impostata su Estendi questi schermi.
Quando un'app con più visualizzazioni (e senza windows.aboveLockScreen) viene avviata durante un'esperienza tutto schermo, il rendering della visualizzazione principale dell'app verrà eseguito sul primo monitor. Se una nuova visualizzazione viene creata dall'app usando CreateNewView(), viene eseguito il rendering nel secondo monitor. Se l'app crea un'altra visualizzazione, passerà al terzo monitor e così via.
Importante
I dispositivi in modalità tutto schermo possono visualizzare una sola visualizzazione per monitor. Ad esempio, se il dispositivo in modalità tutto schermo ha un solo monitor, mostrerà sempre la visualizzazione principale dell'app in modalità tutto schermo. Le nuove visualizzazioni create dall'app non verranno visualizzate.
Quando un'app in modalità tutto schermo ha l'estensione windows.aboveLockScreen ed è in esecuzione sopra il blocco, viene inizializzata in modo diverso. La visualizzazione principale si trova sotto il blocco, con una vista secondaria sopra di essa. Questa visualizzazione secondaria è ciò che l'utente vede. Anche se non si creano in modo esplicito nuove visualizzazioni, si avranno comunque due visualizzazioni nell'istanza dell'app.
È possibile eseguire il codice seguente nella finestra principale dell'app (in modalità di accesso assegnato) per visualizzare il numero di visualizzazioni e se la schermata corrente è la visualizzazione principale.
using Windows.ApplicationModel.Core;
CoreApplication.GetCurrentView().IsMain //false
CoreApplication.Views.Count //2
Dispatcher
Ogni visualizzazione o finestra ha un dispatcher specifico. Poiché la visualizzazione principale è nascosta all'utente, usare GetCurrentView() per accedere alla visualizzazione secondaria dell'app in esecuzione sopra il blocco anziché 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;
});
}
Quando l'app ha windows.aboveLockScreen ed è in esecuzione come esperienza tutto schermo, la creazione di nuove visualizzazioni causerà un'eccezione all'interno dell'app:
Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception
Per questo motivo, non è possibile avere più visualizzazioni o eseguire su più monitor. Se l'app deve supportare uno dei due, dovrai rimuovere l'estensione windows.aboveLockScreen dall'app.
Aggiungere un modo per uscire dall'accesso assegnato
In alcune situazioni, il pulsante di alimentazione, il pulsante di escape o altri pulsanti usati per arrestare un'applicazione potrebbero non essere abilitati o disponibili sulla tastiera. In queste situazioni, fornire un modo per interrompere l'accesso assegnato, ad esempio una chiave software. Il gestore eventi seguente mostra come arrestare la modalità di accesso assegnato rispondendo all'evento di selezione del pulsante che potrebbe essere attivato da una chiave software.
LockApplicationHost^ lockHost = LockApplicationHost::GetForCurrentView();
if (lockHost != nullptr)
{
lockHost->RequestUnlock();
}
Gestione ciclo di vita
Il ciclo di vita di un'app in modalità tutto schermo viene gestito dal framework di accesso assegnato. Se l'app termina in modo imprevisto, il framework tenta di riavviarlo. Se tuttavia un utente preme CTRL+ALT+CANC per visualizzare la schermata di accesso, viene attivato un evento di sblocco. Il framework di accesso assegnato è in ascolto dell'evento e tenterà di terminare l'app.
L'app in modalità tutto schermo può anche registrare un gestore per questo evento ed eseguire azioni prima di uscire. Il salvataggio di tutti i dati è un esempio di questo. Per un esempio di registrazione di un gestore, vedere il codice seguente.
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();
}
Dopo che l'utente preme CTRL+ALT+CANC e viene visualizzata una schermata di accesso, potrebbero verificarsi due cose:
L'utente conosce la password dell'account di accesso assegnato e sblocca il desktop. Il framework di accesso assegnato viene avviato, bloccato il desktop e viene avviata l'app della schermata di blocco che a sua volta avvia l'app in modalità tutto schermo.
L'utente non conosce la password o non esegue altre azioni. Timeout della schermata di accesso e riblocca il desktop; l'app della schermata di blocco viene avviata che a sua volta avvia l'app in modalità tutto schermo.
Non creare nuove finestre o visualizzazioni in modalità di accesso assegnato
La chiamata di funzione seguente termina con un'eccezione di runtime se viene richiamata in modalità di accesso assegnato. Se la stessa app, se usata con blocco, chiama la funzione , non causa un'eccezione di runtime. È utile usare LockApplicationHost per determinare la modalità di accesso assegnata dall'app e codificare di conseguenza l'app, ad esempio non creando nuove visualizzazioni se l'app è in modalità di accesso assegnato.
Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception
Appendice 1: Estensione UWP
Il manifesto dell'applicazione di esempio seguente usa l'estensione UWP windows.aboveLockScreen.
A partire da Windows 10 versione 1607, non esiste più una restrizione sull'estensione piattaforma UWP (Universal Windows Platform) (UWP), in modo che la maggior parte delle app possa essere visualizzata in Impostazioni quando l'utente configura l'accesso assegnato.
<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>
Appendice 2: Risoluzione dei problemi
In genere, se un'app tutto schermo non riesce ad attivarsi sopra l'app della schermata di blocco, puoi trovare il codice di errore di attivazione nella schermata di blocco. Usare il codice di errore per individuare il problema cercando i codici di errore del sistema Windows. Inoltre, Visualizzatore eventi contiene altre informazioni sugli errori di attivazione. A questo scopo:
Aprire il Visualizzatore eventi. È probabile che ci siano due posizioni in cui trovare gli errori di attivazione.
Nel riquadro Visualizzatore eventi (locale) espandere Log di Windows e quindi selezionare Applicazione.
Inoltre, in Visualizzatore eventi (locale) espandere Registri applicazioni e servizi, espandere Windows, espandere App e quindi selezionare Microsoft-Windows-TWinUI/Operational.
Poiché le app in modalità tutto schermo con accesso assegnato non vengono eseguite in modalità schermo intero, ApplicationView.GetForCurrentView(). IsFullScreenMode restituisce false.