( Modifica: aggiornato dopo alcuni altri test)
Controlla la documentazione più recente .
Questa funzione sembra essere chiamata Blocco schermo ora e l'app non deve essere il proprietario del dispositivo. Se il proprietario del dispositivo non è impostato, all'utente verrà richiesto di accettare. Ma ci sono problemi con questo per l'uso del chiosco, menzionati di seguito.
Esistono due modi per attivare il blocco dello schermo:
Manualmente: gli utenti possono abilitare il blocco dello schermo in Impostazioni> Sicurezza> Blocco schermo e selezionare le attività che desiderano bloccare toccando l'icona a forma di puntina verde nella schermata dei recenti. A livello di codice: per attivare il blocco dello schermo a livello di codice, chiama startLockTask () dalla tua app. Se l'app richiedente non è un proprietario del dispositivo, viene richiesta conferma all'utente. Un'app del proprietario del dispositivo può chiamare il metodo setLockTaskPackages () per consentire alle app di essere bloccate senza il passaggio di conferma dell'utente.
Se attivi il blocco dello schermo in modo programmatico (app non proprietaria del dispositivo) o sul dispositivo utilizzando il pin nei recenti, ottieni il seguente comportamento:
Viene visualizzata una finestra di dialogo che chiede all'utente se desidera abilitare il blocco dello schermo e se desidera richiedere una password per uscire. Se premono sì, la barra di stato e le notifiche scompaiono, i pulsanti Indietro, Home e Recenti NON scompaiono. Toccando su Home o Recents appare un brindisi per informare l'utente su come uscire dal blocco dello schermo.
L'utente può quindi trattenere indietro e recent per uscire dal blocco dello schermo. Se l'utente ha scelto di richiedere una password, verrà calciato direttamente alla schermata di blocco. Questo comportamento significa che non è adatto per un kiosk imo. Poiché è troppo facile per gli utenti dei chioschi, guardare la schermata di blocco.
Per ottenere una modalità kiosk corretta è necessario impostare il proprietario del dispositivo. La documentazione di Google afferma che è necessario farlo con NFC:
Per distribuire e attivare un proprietario di dispositivo, è necessario eseguire un trasferimento di dati NFC da un'app di programmazione al dispositivo mentre il dispositivo si trova nello stato non sottoposto a provisioning.
Usare NFC per farlo sembra un po 'complesso (cosa succede se un dispositivo non ha NFC?). Non l'ho ancora esaminato, quindi se qualcuno può fornire informazioni su come procedere con l'impostazione del proprietario del dispositivo tramite NFC? Che ora diventa il punto principale della tua domanda. (ovvero impostazione del proprietario del dispositivo su un dispositivo non rootato)
Ma per confermare che il comportamento è come previsto se si esegue il root di un dispositivo, è possibile impostare il proprietario del dispositivo secondo le istruzioni precedenti di Google (aggiungendo un device_owner.xml) come ho menzionato qui
Ora puoi bloccare correttamente l'app, non viene visualizzata alcuna finestra di dialogo che l'utente può accettare, quando abilitati i recenti e il pulsante home scompaiono e l'utente non può uscire dall'app a meno che l'app non si sblocchi da sola. Una modalità kiosk corretta. Ho provato questo su un Nexus 7 2013 con l'ultima build di Lollipop.
Il frammento seguente attiva il blocco:
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);
if (mDPM.isDeviceOwnerApp(this.getPackageName())) {
Log.d(TAG, "isDeviceOwnerApp: YES");
String[] packages = {this.getPackageName()};
mDPM.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
Log.d(TAG, "isDeviceOwnerApp: NO");
}
if (mDPM.isLockTaskPermitted(this.getPackageName())) {
Log.d(TAG, "isLockTaskPermitted: ALLOWED");
startLockTask();
} else {
Log.d(TAG, "isLockTaskPermitted: NOT ALLOWED");
}