Come abilitare il blocco delle attività nei dispositivi di produzione Android 5.0


12

Questa domanda StackOverflow esplora come abilitare un'app del proprietario del dispositivo, e quindi la modalità kiosk, nell'anteprima dello sviluppatore di Android L. Poiché il metodo richiede una build userdebug di Android, il rooting del dispositivo e la copia di un file XML nel filesystem di root, non sembra adatto alla distribuzione di massa di un dispositivo Android a singola funzione all'interno di un'azienda.

Come verranno installate le app dei proprietari dei dispositivi sui dispositivi Android L di produzione?


hai risolto il problema?
KOTIOS,


Grazie @Spynet - quello sembra essere il riassunto più completo della soluzione.
Adrian Cox,

1
dai un'occhiata qui per una buona guida con src: objectpartners.com/2014/11/04/…
Hayden Thring,

Risposte:


14

( 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");
}

Penso che questa sia la migliore risposta possibile disponibile al momento. Il passaggio NFC rimane un mistero, ma è una domanda molto più ristretta.
Adrian Cox,

Ho cercato di far funzionare il passo NFC ma non ho avuto successo, ho iniziato una domanda su questo qui . Inoltre c'è una richiesta di funzionalità con Google per migliorare il
blocco

1

Non posso commentare una risposta che è un po 'fastidiosa ma supplementare alla risposta di tagy22 che puoi usare dpmper impostare il proprietario del dispositivo. Maggiori dettagli qui .


1
dpmnon farebbe il lavoro se un dispositivo (come un account Google) è impostato nel dispositivo.
Firelord

NFC sarà in quel caso però? Avevo l'impressione che fosse necessario impostare un proprietario del dispositivo prima che un account venisse aggiunto.
Troy Patrick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.