IntroducaoU.are.U for Android SDK e um kit de desenvolvimento da DigitalPersona, atual Crossmatch, para autenticacao de impressao digital.Voce vai precisar fazer tres processos:1- Registro da Digital (Enrollment)2- Captura da Digital (Capture)3- Comparacao do Registro com a Captura (Compare)O Registro consiste em coletar um certo numero de imagens da impressao digital, pra que voce crie um conjunto de minucias chamado FMD, ou Fingerprint Minutiae Data, que serao armazenados em algum formato no seu banco de dados, por exemplo o ISO_19794_2_2005. Esse formato padroniza os dados das minucias, assim voce pode utilizar com outras SDK's ou integrar com outros sistemas.A Captura coleta uma imagem e assim podemos criar um FMD de Captura para comparacao com o FMD de Registro.A comparacao faz um match, ou casamento do FMD de Registro com o FMD de Captura e retorna um score de similaridade entre as duas digitais.O que e necessario ?1- Faca o download da SDK no site da Crossmatch.2- Voce vai precisar de um leitor de impressao digital da Crossmatch.Utilizei o EikonTouch 510, pois na epoca, o U.are.U 5160 precisava de um rooted Android, inviabilizando certos clientes. Outros detalhes sao que os Eikon Touch sao mais leves e por serem capacitivos, consomem menos energia para tablets e celulares.3- Android 5.xRegistro (Enrollment)Para efetuar o registro da digital usando a SDK, voce vai criar um callback para extrair e retornar cada FMD:int resolution = 500;Engine engine = UareUGlobal.GetEngine();Fmd fmd = engine.CreateEnrollmentFmd(fmdFormat, new EnrollmentCallback() { @Override public PreEnrollmentFmd GetFmd(Format format) { try { Fmd fmd = capture(reader, Fid.Format.ISO_19794_4_2005, Fmd.Format.ISO_19794_2_2005, resolution); if(fmd != null) { Engine.PreEnrollmentFmd prefmd = null; prefmd = new Engine.PreEnrollmentFmd(); prefmd.fmd = fmd; prefmd.view_index = 0; return prefmd; } else { return null; } } catch(Exception e) { throw new RuntimeException("Erro ao extrair caracteristicas.", e); } }});A maioria das vezes, voce vai precisar coletar 4 digitais para compor um FMD de registro. Captura (Capture)Para efetuar uma captura:private Fmd capture( Reader reader, Fid.Format fidFormat, Fmd.Format fmdFormat, int resolution) throws UareUException { Fmd fmd = null; while(fmd == null) { Reader.CaptureResult result = reader.Capture(fidFormat, Reader.ImageProcessing.IMG_PROC_DEFAULT, resolution, -1); // verificando a qualidade if(result.image != null && result.quality == Reader.CaptureQuality.GOOD) { Engine engine = UareUGlobal.GetEngine(); fmd = engine.CreateFmd(result.image, fmdFormat); } } return fmd;}Utilize resolution de 500dpi. Atualmente e o padrao de qualidade para impressoes digitais.Comparacao (Compare)Depois de ter o FMD de registro e o FMD de captura, voce pode agora fazer a comparacao das duas digitais:Engine engine = UareUGlobal.GetEngine();int score = engine.Compare(enrolledFmd, 0, capturedFmd, 0); Um score com um valor menor de 100, ja e um valor aceitavel, mas voce pode diminuir esse valor caso queira uma maior precisao.AndroidA SDK se comporta da mesma forma, tanto no Android quanto no Desktop, as diferencas sao que voce precisa solicitar permissao de acesso a USB e usar o context do Android para listar os leitores conectados na USB.Solicitar a permissao para uso da USB utilizando um BroadcastReceiver:private static final String ACTION_USB_PERMISSION = "com.digitalpersona.uareu.dpfpddusbhost.USB_PERMISSION";private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,