Com o uso cada vez mais frequente de dispositivos móveis, inclusive em ambientes corporativos, há uma preocupação que cresce proporcionalmente: como apagar os dados armazenados nos dispositivos que foram extraviados e como impedir a utilização de um dispositivo por pessoas não autorizadas.
Pensando nisso, as principais plataformas de mobilidade da atualidade têm oferecido recursos em nível de programação para que seja possível a implementação de soluções capazes de bloquear um dispositivo contra acessos não autorizados e eliminar os dados armazenados no dispositivo, restaurando suas configurações originais. O conceito de Lock e Wipe aborda essa duas características.
Hoje vamos apresentar a maneira como implementamos o Lock e Wipe na plataforma Android. Essa funcionalidade está disponível a partir do API Level 8, ou seja, a versão 2.2 do Android.
Atenção!
Para que seja possível uma aplicação realizar qualquer uma dessas duas operações, primeiro é preciso dar permissão de administrador à aplicação. Essa permissão quem concede é o próprio usuário, porém, a chamada da tela solicitando a confirmação do usuário é de responsabilidade da própria aplicação. Sua aplicação deve ter um mecanismo capaz de verificar se este tem privilégio de administrador e, não tendo, saber chamar a tela apropriada solicitando a confirmação do usuário. Mostraremos como fazer isso mais adiante.
Colocando a mão na massa
Nosso objetivo aqui é dar uma noção geral de como podemos implementar as operações de Lock e Wipe em um dispositivo com Android.
O primeiro passo é configurar o arquivo Manifest.xml. Precisamos incluir as seguintes tags nele:
<receiver android:name="android.app.admin.DeviceAdminReceiver"
android:label="device_admin" android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
<data android:scheme="@string/app_name" />
</intent-filter>
</receiver>
Como visto acima, precisamos declarar um Receiver, que será responsável pela efetiva execução do Lock e Wipe no dispositivo. Vamos destacar as partes mais importantes dessas tags:
receiver Android:name: aqui deverá constar sua classe do tipo BroadCastReceiver, que deverá ser filha da classe android.app.admin.DeviceAdminReceiver, ou ela própria.
receiver android.permission: permissão que deverá ser dada ao Receiver responsável pela administração do dispositivo (Receiver declarado no atributo acima). Essa permissão garante que somente o sistema interagirá com ele.
meta-data android:resource: essa propriedade é interessante. Você deverá criar um arquivo xml incluindo as ações que seu aplicativo poderá fazer, por ser administrador do dispositivo, e referenciá-lo nessa propriedade. Abaixo um exemplo do conteúdo desse arquivo, indicando somente as ações de lock e wipe:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
<wipe-data />
</uses-policies>
</device-admin>
-
action android:name: Aqui é configurado a Intent que será chamada pela sua aplicação para que o usuário conceda privilégio de administrador à sua aplicação. Abaixo é mostrado um exemplo de como chamar essa Intent em sua aplicação:
/*
*Intancia um ComponentName com o contexto em questão (MyClass.this)
*e com o Receiver declarado no Manifest.xml
*/
ComponentName appAdmin = new ComponentName(MyClass.this,
DeviceAdminReceiver.class);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
appAdmin );
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Texto adicional explicando o motivo da solicitação");
startActivityForResult(intent, 1);
Após todo esse processo, agora vamos mostrar como é realizado o Lock e Wipe programaticamente.
Aplicando o Lock e Wipe
A classe que expõe os métodos responsáveis pelas operações de Lock e Wipe no Android é a classe android.app.admin.DevicePolicyManager. A operação de Wipe consiste em inicializar o dispositivo, excluindo todos os dados armazenados nele e restaurando as configurações originais. Já a operação de Lock consiste em bloquear o dispositivo contra o uso não autorizado, sendo possível desbloqueá-lo caso a senha inserida seja a correta. Uma peculiaridade, nesse caso, é que podemos inclusive alterar a senha via programação, mesmo já existindo uma senha cadastrada previamente pelo usuário referente ao bloqueio.
Antes de chamar os métodos precisamos instanciar a classe DevicePolicyManager. Abaixo segue o exemplo de como fazemos isso:
//MyContext = contexto em questão
DevicePolicyManager policeManager = (DevicePolicyManager)
MyContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
Após instanciar a classe, já podemos chamar os métodos responsáveis pelas operações. Mostraremos como isso é feito:
Wipe:
policeManager.wipeData(0);
Lock:
policeManager.lockNow();
Como podemos perceber, não há dificuldades para entender e utilizar esse recurso que é muito útil, principalmente nos dias atuais, onde os dados contidos nos dispositivos são muito mais valiosos do que os próprios dispositivos. Não perca nossos próximos posts sobre Lock e Wipe, pois queremos abordar esse recurso também em outras plataformas móveis. Para maiores informações sobre Lock e Wipe no Android clique Aqui. Até Mais!
Escrito por Maycon Roberto