• Nenhum resultado encontrado

4.4 Aplicação de testes

4.4.1 Necessidades Android

Foi feito um estudo das necessidades para este projeto, uma vez que decidimos usar os sensores presentes no smartphone Android, sensores estes: acelerómetro, sensor de luminosidade, microfone, sensor de proximidade e GPS.

Após a análise e levantamento das interfaces necessárias, com recurso à documen- tação do Android Developer, bem como todos os métodos a elas associadas para o desenvolvimento deste projeto, procedeu-se à importação das bibliotecas Android necessárias. A adaptação destas bibliotecas serviu de base para o projeto apresen- tado neste mesmo documento.

Permissões e Armazenamento

As políticas de permissões (ou falta delas), servem para proteger a privacidade do utilizador do dispositivo. Uma vez que todas as aplicações são independentes umas das outras e ao sistema em si, todas as aplicações necessitam de solicitar ao disposi- tivo a permissão para aceder a conteúdos sensíveis como o acesso a SMS, contactos ou agenda. Para além disso, também alguns elementos de hardware como o Bluetooth ou a Câmara também precisam de permissões para que possam ser acedidos. Por defeito, nenhuma aplicação tem permissão para realizar alguma ação que inter- fira com outras, com o sistema, ou com dados do utilizador. Como tal, são declaradas no manifesto da aplicação as permissões necessárias para o funcionamento da mesma. O sistema operativoAndroid, dependendo depois do tipo de permissão, poderá for- necer automaticamente a permissão (permissão normal), ou terá que solicitar ao utilizador o consentimento do mesmo (permissão perigosa) [10].

Categorias de Permissões

Como referido, existem dois tipos de permissões do sistema, sendo elas as permissões normais e as permissões perigosas [10].

• As permissões normais são aquelas que não representam risco direto à privaci- dade do utilizador ou de outras aplicações. Um exemplo seria a permissão para definir um novo fuso-horário. Após ser declarada no manifesto uma permissão normal, o sistema concede automaticamente esta permissão.

• Já as permissões perigosas permitem que o sistema tenha acesso a dados sen- síveis do utilizador ou dados armazenados acerca de outras aplicações. A capacidade da aplicação aceder aos contactos do utilizador é uma permissão perigosa, por exemplo. Neste caso, após a declaração de uma permissão peri- gosa, o utilizador necessita de aprovar (ou não, se assim o desejar) a cedência de permissão explicitamente.

Em seguida na tabela 4.1 serão apresentadas as diferentes permissões, normais e perigosas, que poderão ser declaradas nas aplicações em geral.

Permissões Normais Permissões Perigosas ACCESS_LOCATION_EXTRA_ COMMANDS READ_CALENDAR ACCESS_NETWORK_STATE WRITE_CALENDAR ACCESS_NOTIFICATION_POLICY READ_CALL_LOG ACCESS_WIFI_STATE WRITE_CALL_LOG BLUETOOTH PROCESS_OUTGOING_CALLS BLUETOOTH_ADMIN CAMERA BROADCAST_STICKY READ_CONTACTS CHANGE_NETWORK_STATE WRITE_CONTACTS CHANGE_WIFI_MULTICAST_STATE GET_ACCOUNTS CHANGE_WIFI_STATE ACCESS_FINE_LOCATION DISABLE_KEYGUARD ACCESS_COARSE_LOCATION EXPAND_STATUS_BAR RECORD_AUDIO FOREGROUND_SERVICE READ_PHONE_STATE GET_PACKAGE_SIZE READ_PHONE_NUMBERS INSTALL_SHORTCUT CALL_PHONE INTERNET ANSWER_PHONE_CALLS KILL_BACKGROUND_PROCESSES ADD_VOICEMAIL MANAGE_OWN_CALLS USE_SIP MODIFY_AUDIO_SETTINGS BODY_SENSORS NFC SEND_SMS READ_SYNC_SETTINGS RECEIVE_SMS READ_SYNC_STATS READ_SMS RECEIVE_BOOT_COMPLETED RECEIVE_WAP_PUSH REORDER_TASKS RECEIVE_MMS REQUEST_COMPANION_RUN_ IN_BACKGROUND READ_EXTERNAL_STORAGE REQUEST_COMPANION_USE_ DATA_IN_BACKGROUND WRITE_EXTERNAL_STORAGE REQUEST_DELETE_PACKAGES REQUEST_IGNORE_BATTERY_ OPTIMIZATIONS SET_ALARM SET_WALLPAPER SET_WALLPAPER_HINTS TRANSMIT_IR USE_FINGERPRINT VIBRATE WAKE_LOCK

Neste trabalho foram usadas tanto permissões normais como perigosas. As permis- sões definidas foram então:

<manifest ...> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ... </manifest>

As permissões normais de bluetooth foram utilizadas para permitir que o dispositivo fosse capaz de detetar uma ligação bluetooth multimédia como uma coluna ou um headphones.

As permissões perigosas foram utilizadas para determinar se o dispositivo está a receber ou a efetuar alguma chamada telefónica, aceder à memória externa para escrita e leitura respetivamente, dos dados que iriam ser armazenados.

Como referido anteriormente, uma permissão perigosa implica que o utilizador con- ceda à aplicação essa mesma permissão explicitamente, como tal, na Figura 4.14, será apresentada a interface que é mostrada ao utilizador nesse mesmo instante.

Figura 4.14 – Exemplo de caixa de diálogo onde o sistema solicita uma permissão perigosa ao utilizador [10]

Armazenamento

O SO Android permite que dados/ficheiros sejam gravados de várias formas, no- meadamente na memória interna ou externa do dispositivo [33]. No presente caso, por uma questão de facilidade entre a passagem dos dados recolhidos pelos senso- res do dispositivo para o computador, para posterior processamento, foi decidido armazenar os dados nessa mesma memória do dispositivo.

Após concedida a permissão para a aplicação aceder, escrever e ler na memória do dispositivo é então necessária a criação desse ficheiro para armazenamento de dados. Este armazenamento de dados é fundamental para o pós-processamento dos dados nesta fase inicial do projeto, uma vez que os dados serão inicialmente processados com acesso à ferramenta Octave. É ainda necessário definir no separador das dependências uma biblioteca que permite escrever, ler, apagar e adicionar a ficheiros dados.

dependencies {

compile ’com.snatik:storage:2.1.0’ ...

}

Vamos portanto descrever como funciona esta API e o seu algoritmo para armaze- namento de dados.

• Inicialização - é definida uma nova Storage e um caminho para essa Storage. Storage storage = new Storage(getApplicationContext()); String path;

• Diretório - é depois definido o caminho para a Storage criada. No nosso caso foi definido como sendo o diretório dos Downloads.

String path =

storage.getExternalStorageDirectory

(Environment.DIRECTORY_DOWNLOADS);

• Nome do ficheiro e tempo de criação - é definido uma string que con- tém o nome do ficheiro, e outra que converte o tempo atual do sistema em milissegundos numa string, com o intuito de diferenciar o nome dos diferentes ficheiros criados, através do tempo de criação do mesmo.

String filename = "/data" ;

Long tsLong = System.currentTimeMillis() / 1000 ; String timeStamp = tsLong.toString() + ".txt" ;

• Criação do ficheiro - depois de definidos todos os parâmetros, é altura de criar o ficheiro propriamente dito. Esta declaração deve conter o caminho (diretório) bem como o nome do ficheiro.

storage.createFile(path+filename1+ts, "");

É de salientar que o nome do ficheiro vai ser ‘’data + tempo de criação do mesmo‘’. Assim, serve para distinguir umas recolhas de dados de outras. • Gravação dos dados - nesta fase só falta concatenar os dados que estão a

storage.appendFile (path + filename1 + ts,

new StringBuilder().append(dados).toString());

Neste passo salientamos o facto de ‘’dados‘’ ser a variável correspondente aos dados recolhidos propriamente ditos.

Documentos relacionados