( Editar: atualizado após mais alguns testes)
Verifique a documentação mais recente .
Esse recurso parece ser chamado de fixação de tela agora e o aplicativo não precisa ser o proprietário do dispositivo. Se o proprietário do dispositivo não estiver definido, o usuário será solicitado a aceitar. Mas há problemas com isso para uso do quiosque, mencionados abaixo.
Há duas maneiras de ativar a fixação da tela:
Manualmente: os usuários podem ativar a fixação de tela em Configurações> Segurança> Fixação de tela e selecionar as tarefas que desejam fixar tocando no ícone de alfinete verde na tela recente. Programaticamente: para ativar a fixação de tela programaticamente, chame startLockTask () no seu aplicativo. Se o aplicativo solicitante não for o proprietário do dispositivo, o usuário será solicitado a confirmar. Um aplicativo proprietário do dispositivo pode chamar o método setLockTaskPackages () para permitir que os aplicativos sejam fixáveis sem a etapa de confirmação do usuário.
Se você ativar a fixação de tela de forma programática (aplicativo que não seja o proprietário do dispositivo) ou no dispositivo usando o alfinete nos últimos casos, obterá o seguinte comportamento:
Uma caixa de diálogo é exibida perguntando ao usuário se ele deseja ativar a fixação da tela e se deseja exigir uma senha para sair. Se eles pressionarem sim, a barra de status e as notificações desaparecerão, os botões Voltar, Página Inicial e Recentes NÃO desaparecerão. Tocar na tela inicial ou nos recentes faz um brinde aparecer informando ao usuário como sair da fixação da tela.
O usuário pode então segurar e recuar para sair da fixação da tela. Se o usuário selecionado para solicitar uma senha, ele será chutado diretamente para a tela de bloqueio. Esse comportamento significa que não é adequado para uma imo de quiosque. Como é muito fácil para os usuários do quiosque acabar olhando para a tela de bloqueio.
Para obter um modo de quiosque adequado, precisamos definir o proprietário do dispositivo. A documentação do Google diz que você precisa fazer isso com a NFC:
Para implantar e ativar o proprietário de um dispositivo, você deve executar uma transferência de dados NFC de um aplicativo de programação para o dispositivo enquanto o dispositivo estiver em seu estado não provisionado.
Usar a NFC para fazer isso parece um pouco complexo (e se um dispositivo não tiver NFC?). Ainda não investiguei isso, portanto, se alguém puder fornecer informações sobre como definir o proprietário do dispositivo pela NFC? Que agora se torna o ponto principal da sua pergunta. (ou seja, definindo o proprietário do dispositivo em um dispositivo não raiz)
Mas para confirmar o comportamento é o esperado, se você faz root em um dispositivo, pode definir o proprietário do dispositivo conforme as instruções anteriores do Google (adicionando um device_owner.xml), como mencionei aqui
Agora você pode bloquear corretamente o aplicativo, nenhuma caixa de diálogo é exibida para o usuário aceitar, quando ativado, os botões recentes e o botão home desaparecem e o usuário não pode sair do aplicativo a menos que seu aplicativo seja desbloqueado. Um modo de quiosque adequado. Eu testei isso em um Nexus 7 2013 com a versão mais recente do Lollipop.
O seguinte snippet ativa o bloqueio:
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");
}