• Nenhum resultado encontrado

4. Aplicação mobile

4.2. Conceptualização e especificação técnica

4.2.1. Requisitos mínimos e Modelo do Sistema

A aplicação construída suporta a versão mínima da API do Android 11, baseado no Linux Kernel 2.6.36, tendo sido construída e testada na 15 (target), baseado no Linux kernel 3.0.1. Em termos comerciais estas versões têm outras designações: Android 3.0 (Honeycomb) e Android 4.0.1 (Ice Cream Sandwich), respetivamente.No início dos testes técnicos um dos objetivos era que aplicação fosse construída para a versão 4.1 x Jelly Bean, API 16, mas tal não foi possível devido aos testes terem sido realizados num aparelho que tem instalada a versão API 15.

O modelo do sistema, adiante apresentado na pág. nº 105, foi dividido em três módulos principais compostos pelo a)-sensor biométrico, b)-aplicação móvel (componente client-side) e c)-plataforma web (componente server-side). Neste subcapítulo irão ser descritas a sua arquitetura/componentes, tecnologias utilizadas, funcionamento, de que forma se interligam e interagem e as principais dificuldades encontradas.

4.2.1.1. Sensor biométrico

Para a monitorização dos dados foi utilizado um oxímetro desenvolvido pela empresa Nonin, modelo 9560. Os dados monitorizados pelo sensor, SpO2 (percentagem de oxigénio no sangue) e HR (Heart Rate) são enviados para o smartphone por uma ligação wireless baseada em Bluetooth111, para aí serem processados pela aplicação criada. Este sensor é compatível com a norma Bluetooth 2.0112, classe 1, tendo sido utilizada o perfil SPP (Serial Port Profile) para efetuar a conexão com aplicação instalada no smartphone. Na figura do modelo do sistema, abaixo inserida, foi colocada uma representação da arquitetura Bluetooth alínea d). A camada de aplicação deste perfil, utiliza o canal do protocolo de middlleware RFComm113, que habilita a comunicação série através da emulação de portas na camada do grupo de transporte L2CAP114, (Brito, Puska, & Ogliari).

A monitorização biométrica tem início quando o utilizador coloca o oxímetro num dedo, com exceção do polegar, e os sensores aí existentes detetam através da pele a saturação de

111https://www.bluetooth.org/en-us, acesso em 29-09-2014 112https://www.bluetooth.org/en-us/specification/assigned-numbers/host-controller-interface, acesso em 13-10-2014 113 https://developer.bluetooth.org/TechnologyOverview/Pages/RFCOMM.aspx, acesso em 13-10-2014 114https://developer.bluetooth.org/TechnologyOverview/Pages/L2CAP.aspx, acesso em 13-10-2014 101

oxigênio funcional da hemoglobina arterial (SpO2%) e a taxa de pulsação cardíaca (HR-Heart Rate). O oxímetro suporta os seguintes formatos de dados: O “data format 13” sendo efetuada uma medição pontual e registado a sua data e hora; O “data format 8” onde são fornecidas medições em tempo real a cada segundo; O “data format 2” onde são fornecidas medições em tempo real, permitindo traçar uma onda, com 8 bits de resolução, a cada 1/75th de um segundo; E por último o “data format 7”, semelhante ao anterior mas com 16 bits de resolução (Nonin, 2012). Foi escolhido o “data format 8”, em virtude do ser necessário monitorizar os dados biométricos dos pacientes em tempo real e neste momento ainda não ser necessário traçar uma onda com os valores monitorizados.

4.2.1.2. Aplicação móvel (client-side)

O módulo cliente-side é composto pelo smartphone onde foi instalada a aplicação criada, que foi desenvolvida em Java115 para o sistema operativo Android116, target 4.0, Ice Cream Sandwich, API 15, podendo funcionar até à versão mínima 11. Para estabelecer uma ligação à internet poderá ser utilizada uma rede Wifi que esteja disponível no momento, sendo a comunicação entre a aplicação e a plataforma web efetuada através da troca de HTTP117 Requests e HTTP Responses.

a) Arquitetura Android

A arquitetura do Android é composta por uma série de camadas que abstraem as camadas nativas inferiores, que irão agora ser descritas de acordo com Tosin (2014). No nível inferior encontra-se uma versão modificada do Kernel do Linux. Esta camada possui os drivers que comunicam com o hardware, como por exemplo os circuitos responsáveis pela conectividade Wifi e Bluetooth. É através dela que é permitido fazer a gestão da memória e processos. O Linux permite a existência de threads, oferecendo desse modo ao Android a possibilidade de realizar multitarefas, síncronas ou assíncronas. Num nível superior encontra-se a camada Libraries, composta pelas bibliotecas nativas da plataforma, normalmente escritas em C ou C++, como por exemplo, o SQLite, um sistema local de gestão de base de dados, o WebKit motor nativo do browser e o Secure Sockets Layer (SSL) utilizada para estabelecer comunicações seguras através da internet entre um cliente e um servidor.

No mesmo nível encontra-se o Android Runtime, composto pelas Core Libraries, que são as bibliotecas centrais do Android e a Dalvik Virtual Machine. As Core Libraries disponibilizam o Java SE (Standard Edition), compostas pelas bibliotecas centrais da linguagem Java. A Dalvik Virtual Machine (DVM – alínea e) foi projetada especificamente para Android. Esta, apesar de ter sido programada em Java, não é uma JVM (Java Virtual Machine) habitual. Trata-se de uma máquina um pouco diferente, tendo sido otimizada para ser executada em dispositivos móveis caraterizados por terem uma capacidade de memória limitada. As aplicações que funcionam no Android são construídas em Java e necessitam de uma instância da Dalvik VM para serem executadas. Esta máquina virtual não executa bytecode, mas sim arquivo.dex (Dalvik Executable).

Quando são desenvolvidas aplicações para Java são criados arquivos .java, contendo o seu código-fonte, sendo o seu resultado compilado em arquivos .class, também conhecidos por

115http://www.oracle.com/technetwork/pt/java/index.html, acesso em 13-10-2014 116 http://developer.android.com/about/dashboards/index.html, acesso em 13-10-2014 117http://www.w3.org/Protocols/, acesso em 13-10-2014 102

bytecode; a JVM consegue interpretar e executar estes arquivos. No caso do Android é diferente porque a DVM não conhece bytecode; só conhece arquivos .dex. Assim, para tal acontecer no Android é necessário executar mais um procedimento: a conversão de arquivos .class para .dex, que já podem ser executados pela DVM.

A camada seguinte denomina-se Application Framework e é composta pela API em Java, tendo os programadores permissão para aí poderem utilizar as suas funções e construir com estas as suas aplicações. Por último encontra-se a camada Application, onde existem várias aplicações nativas, como por exemplo a de localização, a de contactos, a relacionada com o telefone e o browser. Uma vantagem importante do facto de ambas estarem ao mesmo nível é a possibilidade de ter acesso, sem diferenciação, aos mesmos recursos nativos da API Android. A aplicação Android desenvolvida foi instalada através de um ficheiro com extensão .apk. Este pacote é composto pelos arquivos .dex, resources (imagens e sons utilizados) e o Manisfest file, arquivo principal que configura a aplicação.

b) Aplicação desenvolvida

A nível da user interface a aplicação criada para os testes permite que os utilizadores insiram alguns dados pessoais, como por exemplo: um número de paciente pré-determinado (criado exclusivamente para os testes), a idade e o peso. Permite também selecionar o oxímetro e visualizar os dados da monitorização de SpO2% e de HR, as respetivas médias e receber um feedback sobre o seu estado de saúde, composto por alertas do tipo visual, sonoro, vibratório ou mensagens escritas. No final as medições armazenadas podem ser enviadas pelos utilizadores para a base dados da plataforma web Exercit@rt. Caso ocorra algum erro na seleção do oxímetro ou no envio dos dados é exibido um aviso do tipo toast118 com essa informação. Esta interface constitui basicamente um Handler para mensagens enviadas pelo arquivo BTConnection.java abaixo mencionado.

A ligação do oxímetro com aplicação criada é efetuada da seguinte forma: os dados são enviados por Bluetooth do sensor para aplicação que regista todas as medições durante os exercícios. A comunicação entre o sensor e a aplicação instalada no smartphone é feito por Bluetooth, através dum arquivo denominado BTConnection.java, recorrendo às classes nativas do Android, objetos BluetoothAdapter, BlueetoothDevice e BluetoothSocket, permitindo desta forma receber os dados enviados. No seu interior foi criado um ciclo infinito fazendo com que aplicação esteja continuamente à espera da chegada de dados. Este bloco de código foi criado numa Thread separada, para não interferir com a UI thread119 principal do Android, já que só esta pode alterar o conteúdo do User Interface, caso contrário poderia existir uma colisão e aplicação apresentaria um erro inesperado e encerraria.

A aplicação interpreta os dados enviados no “data format 8”, identificando este formato através da sua assinatura presente no bit 7 de cada um dos 4 Bytes, 1-0-0-0. O valor do HR está dividido em dois bytes (1 e 2), e o SpO2% num byte (3), tendo sido necessário converte-los para decimal e enviar os dados numa mensagem para o User Interface da aplicação para exibir a informação.

118

Toast é um tipo de feedback caraterístico do Android, onde é apresentada uma pequena janela com informação simples.

119https://developer.android.com/training/multiple-threads/communicate-ui.html, acesso em 18-10-2014

103

Os dados recebidos são organizados num array e armazenados temporariamente na memória interna do smartphone antes de serem enviados para a plataforma web. Esse array contém os seguintes valores: nº de paciente, idade, peso, SpO2%, HR, média SpO2% e média HR. Quando o utilizador termina a monitorização e clica no botão para enviar os dados é chamada o arquivo EnvioDados.java, que vai abrir uma página da plataforma web regista_Exercicio.php120.

Tabela 25-Data format 8, constituição do pacote dados

Pacote: STATUS+HR8+HR7, HR (7bits), SpO2 (7bits), STATUS2 (7 bit) 1 Byte

STATUS+HR8+HR7 Assinatura

Alinhamento

Bits 7 6 5 4 3 2 1 0

Valores 1 R OOT LPRF MPRF ARTF HR8 HR7

2 Byte HR (7bits) Bits 7 6 5 4 3 2 1 0 Valores 0 HR6 HR5 HR4 HR3 HR2 HR1 HR0 3 Byte SpO2 (7bits) Bits 7 6 5 4 3 2 1 0 Valores 0 SP6 SP5 SP4 SP3 SP2 SP1 SP0 4 Byte STATUS2 (7 bits) Bits 7 6 5 4 3 2 1 0

Valores 0 R SPA R SNSF R R LOW BAT

Os dados são enviados para o servidor da plataforma web, recorrendo ao formato para troca de dados JSON121, tendo sido usado a libraria HTTP do Android, para estabelecer a comunicação, através de um pedido HTTP Request usando o método POST, ao qual o servidor responde com um OK ou com um ERROR, que é enviado para a User Interface da aplicação.

Os dados compostos pela identificação do utilizador e o array com as medições são enviados em JSON, em virtude de ser uma codificação leve, independente de plataforma e poder ser utilizada com as librarias do Android (client-side) e PHP (server-side) para fazer o “encode” e “decode” dos dados. Desta forma resolve-se o problema da comunicação entre estes diferentes sistemas, a app mobile e a plataforma web.

120

http://exercitarte.web.ua.pt/regista_Exercicio.php, acesso em 05-10-2014

121http://json.org/, acesso em 14-10-2014

104

O JSON é composto por um conjunto de atributos nome-valor, não sendo necessário, como na linguagem XML122, utilizar um grande número de tags. A outra opção teria sido utilizar uma abordagem SOAP123, mas esta apresentou-se com uma maior dificuldade.

Esta seção do modelo do sistema foi a mais difícil de implementar, porque foi necessário encontrar uma solução técnica para conseguir uma forma da aplicação criada interpretar os dados enviados no formato escolhido (data formt 8) pelo sensor, em linguagem binária, e converte-los para decimal para serem exibidos e enviados para a plataforma web.

4.2.1.3. Plataforma Web (server-side)

No módulo server-side encontra-se um servidor web Apache, onde foi instalada a plataforma Exercit@rt e a sua base dados do tipo MySQL, que utiliza, para interação/resposta a pedidos, a linguagem SQL. Foi criado, na plataforma Exercit@rt, um script simples em PHP denominado regista_exercicios.php, que recebe os dados do POST e recorre à libraria JSON do PHP para descodificar os dados convertendo-os num array associativo. Depois executa uma query SQL à base dados para criar um registo para esses exercícios e para as medições efetuadas e recolhidas.

Existem dois tipos de HTTP Request – o GET e POST, o primeiro envia a informação por URL, não dando garantias que este suportasse o tamanho exigido pelos dados transferidos e por possibilitar uma eventual falha de segurança e de privacidade, tendo por estas razões sido escolhida a segunda opção. Importa ter em consideração que no protótipo implementado, o acesso ao script regista_exercicios.php é público, podendo qualquer pessoa utilizando um browser efetuar registos, desde que conheça o formato de dados utilizado. Em futuros desenvolvimentos preconiza-se a encriptação destes pedidos ou, em alternativa, utilizar-se um processo de autenticação que restrinja o acesso ao script.

O arquivo regista_exercicios.php é sempre invocado pela aplicação criada quando os dados são enviados. Depois deste procedimento o servidor devolve uma resposta tipo HTTP Response com o resultado positivo ou negativo da operação, para a user interface da aplicação exibir o feedback daquela ação através dum toast. O servidor web Apache é responsável por processar os pedidos enviados pela aplicação.

122

http://www.w3schools.com/xml/, acesso em 19-10-2014

123http://www.w3schools.com/webservices/ws_soap_intro.asp, acesso em 19-10-2014

105

l