Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf ·...

61
Programação para Dispositivos Móveis Sensores

Transcript of Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf ·...

Page 1: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Programação para Dispositivos MóveisSensores

Page 2: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Introdução

▪ Smartphones podem possuir pelo menos 10 tipos de sensores importantes que auxiliam no funcionamento do aparelho, fornecem informações aos aplicativos e recolhem dados do ambiente e também do usuário

▪ É possível utilizar sensores no dispositivo para adicionar recursos avançados de localização e movimento ao seu aplicativo, desde dados do GPS ou da localização da rede, até a utilização do acelerômetro, giroscópio, temperatura, barômetro e muito mais.

▪ Alguns sensores são de hardware, outros de software e outros que combinam funções de outros sensores, gerando novas funcionalidades

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 3: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Introdução

▪ Exemplos

▪ Um jogo pode rastrear leituras do sensor de gravidade de um dispositivo para inferir gestos e movimentos complexos do usuário, como inclinação, oscilação, rotação ou oscilação.

▪ Um aplicativo climático pode usar o sensor de temperatura e o sensor de umidade de um dispositivo para calcular e reportar o ponto de condensação.

▪ Um aplicativo de viagem pode usar o sensor de campo geomagnético e o acelerômetro para informar um rolamento de bússola.

▪ Um sensor de movimento pode detectar a movimentação de um ser humano e capturar a foto desta pessoa.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 4: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Movimento

▪ A plataforma Android fornece vários sensores que permitem monitorar o movimento de um dispositivo.

▪ As possíveis arquiteturas dos sensores variam de acordo com o tipo de sensor:

▪ Os sensores de gravidade, aceleração linear, vetor de rotação, movimento significativo, contador de passos e detector de degrau são baseados em hardware ou em software.

▪ Os sensores do acelerômetro e do giroscópio são sempre baseados em hardware.

▪ A maioria dos dispositivos com Android tem um acelerômetro, e muitos agora incluem um giroscópio.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 5: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Movimento

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_ACCELEROMETER

SensorEvent.values[0] Força de aceleração ao longo do eixo x (incluindo a gravidade).

m/s²SensorEvent.values[1] Força de aceleração ao

longo do eixo y (incluindo gravidade).

SensorEvent.values[2] Força de aceleração ao longo do eixo z (incluindo a gravidade).

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 6: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Movimento

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_ACCELEROMETER_UNCALIBRATED

SensorEvent.values[0] Aceleração medida ao longo do eixo X s/ compensação de polarização.

m / s2

SensorEvent.values[1] Aceleração medida ao longo do eixo Y s/ compensação de polarização.

SensorEvent.values[2] Aceleração medida ao longo do eixo Z s/ compensação de polarização.

SensorEvent.values[3] Aceleração medida ao longo do eixo X c/ compensação de polarização.

SensorEvent.values[4] Aceleração medida ao longo do eixo Y c/ compensação de polarização.

SensorEvent.values[5] Aceleração medida ao longo do eixo Z c/ compensação de polarização.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 7: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Movimento

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_GYROSCOPE

SensorEvent.values[0] Taxa de rotação ao redor do eixo x.

rad / sSensorEvent.values[1] Taxa de rotação em torno do eixo y.

SensorEvent.values[2] Taxa de rotação ao redor do eixo z.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 8: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Movimento

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_GRAVITY

SensorEvent.values[0] Força da gravidade ao longo do eixo x.

m / s2

SensorEvent.values[1] Força da gravidade ao longo do eixo y.

SensorEvent.values[2] Força da gravidade ao longo do eixo z.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 9: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Movimento

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_LINEAR_ACCELERATION

SensorEvent.values[0] Força de aceleração ao longo do eixo x (excluindo a gravidade).

m / s2SensorEvent.values[1] Força de aceleração ao longo do eixo y (excluindo a

gravidade).

SensorEvent.values[2] Força de aceleração ao longo do eixo z (excluindo a gravidade).

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 10: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Posição

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ A plataforma Android fornece dois sensores que permitem determinar a posição de um dispositivo: o sensor de campo geomagnético e o acelerômetro.

▪ Também fornece um sensor que permite determinar a proximidade da face de um dispositivo a um objeto (conhecido como sensor de proximidade ). O sensor de campo geomagnético e o sensor de proximidade são baseados em hardware.

▪ Os sensores de posição normalmente não são usados para monitorar movimento ou movimento do dispositivo, como tremor, inclinação ou empuxo.

Page 11: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Posição

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_GAME_ROTATION_VECTOR

SensorEvent.values[0] Componente do vetor de rotação ao longo do eixo x (x * sin (θ / 2)).

Sem unidade

SensorEvent.values[1] Componente do vetor de rotação ao longo do eixo y (y * sin (θ / 2)).

SensorEvent.values[2] Componente do vetor de rotação ao longo do eixo z (z * sin (θ / 2)).

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 12: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Posição

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_GEOMAGNETIC_ROTATION_VECTOR

SensorEvent.values[0] Componente do vetor de rotação ao longo do eixo x (x * sin (θ / 2)).

Sem unidade

SensorEvent.values[1] Componente do vetor de rotação ao longo do eixo y (y * sin (θ / 2)).

SensorEvent.values[2] Componente do vetor de rotação ao longo do eixo z (z * sin (θ / 2)).

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 13: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Posição

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_MAGNETIC_FIELD

SensorEvent.values[0] Intensidade do campo geomagnético ao longo do eixo x.

μT

SensorEvent.values[1] Intensidade do campo geomagnético ao longo do eixo y.

SensorEvent.values[2] Intensidade do campo geomagnético ao longo do eixo z.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 14: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Posição

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_ORIENTATION

SensorEvent.values[0] Azimute (ângulo ao redor do eixo z). Graus

SensorEvent.values[1] Pitch (ângulo ao redor do eixo x).

SensorEvent.values[2] Rolar (ângulo ao redor do eixo y).

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 15: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Posição

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_PROXIMITYSensorEvent.values[0] Distância do objeto. (Alguns sensores de

proximidade fornecem apenas valores binários representando perto e longe)

Cm

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 16: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Ambiente

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ A plataforma Android fornece quatro sensores que permitem monitorar várias propriedades ambientais. Você pode usar esses sensores para monitorar a umidade relativa do ambiente, a iluminação, a pressão ambiente e a temperatura ambiente perto de um dispositivo com tecnologia Android.

▪ Todos os quatro sensores de ambiente são baseados em hardware e estão disponíveis somente se um fabricante de dispositivos os tiver incorporado em um dispositivo.

Page 17: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensores de Ambiente

Sensor Dados do Evento do Sensor

Descrição Unidades de Medida

TYPE_AMBIENT_TEMPERATURE event.values[0] Temperatura ambiente °C

TYPE_LIGHT event.values[0] Iluminância Lx

TYPE_PRESSURE event.values[0] Pressão do Ar hPA ou mbar

TYPE_RELATIVE_HUMIDITY event.values[0] Umidade relativa %

TYPE_TEMPERATURE event.values[0] Temperatura do dispositivo °C

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 18: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Crie um novo projeto no Android Studio

▪ Escolha para criar uma “Empty Activity”

▪ Coloque o nome do projeto de ➔ Sensores

Page 19: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Crie um novo projeto no Android Studio

▪ Escolha para criar uma “Empty Activity”

▪ Coloque o nome do projeto de ➔ Sensores

▪ A estrutura do projeto ficará conforme a imagem

Page 20: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Lembrando:▪ AndroidManifest fica as informações do APP▪ MainActivity é a Activity, a tela da aplicação,

neste arquivo fica toda parte lógica▪ activity_main.xml é a tela, associada a classe

java MainActivity. Neste arquivo colocaremos os elementos gráficos

▪ Para começar, vamos criar um botão que, ao clicar nele, será apresentada a relação de sensores do dispositivo

▪ Então abra o arquivo activity_main.xml

Page 21: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Faremos algumas modificações conforme o código do próximo slide

▪ Vamos definir o Layout

▪ Remover o componente TextView

▪ e adicionar um componente Button com um método onClick chamado “ListarSensores”

▪ Ao abrir o arquivo activity_main.xml pela primeira vez, ele entra em modo “Design”, troque para o modo “Text” na parte inferior da tela

Page 22: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">

<Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content" android:text="Listar Sensores"android:onClick="ListarSensores"/>

</LinearLayout>

Page 23: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Note que o nome do método “ListarSensores” está com um traço vermelho embaixo, indicando erro e, do lado esquerdo, aparece uma lâmpada vermelha

▪ Isso ocorre pois o método ListarSensores foi criado no xml mas ainda não foi criado na classe java (classe lógica MainActivity)

▪ Para corrigir este “erro”, clique na lâmpada que aparece a esquerda OU clique sobre o nome do método (ListarSensores) e pressione no teclado em conjunto as teclas ALT + ENTER

Page 24: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Surgirá uma lista com opções igual a da imagem, escolha a opção

▪ “Create ‘ListarSensores(View)’ in MainActivity”

Page 25: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Desta forma o método que executará a ação de listar o nome dos sensores está criado, porém ainda não faz nada

▪ Agora vamos colocar as ações

Page 26: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Existem basicamente três classes de vital importância para nós programadores:

▪ SensorManager (android.hardware.SensorManager): permite que acessemos os sensores dos dispositivos;

▪ Sensor (android.hardware.Sensor): representa um dos sensores propriamente dito;

▪ SensorEvent (android.hardware.SensorEvent): encapsula as informações de um evento ocasionado por um sensor. Por exemplo, no sensor de luz, quando a leitura indica uma alteração na luminosidade do ambiente, o sensor acusará um evento. Cabe então ao programa trabalhar com os novos valores.

Page 27: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Primeiramente vamos instanciar a classe SensorManager, criando o objeto mSensorManager

▪ A classe Activity possui um método chamado getSystemService, que permite que o desenvolvedor trabalhe com um serviço no nível de sistema operacional.

▪ A mesma classe também fornece diversas constantes para acessar diferentes serviços. Uma delas é a SENSOR_SERVICE, que faz com que o método citado retorne um SensorManager

▪ Agora vamos então para a classe MainActivity (código java) para programa-la

Page 28: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

public class MainActivity extends AppCompatActivity {

SensorManager mSensorManager;

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);}

public void ListarSensores(View view) {}

}

Page 29: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Agora que temos o serviço sensor associado a variável mSensorManager, vamos no método do botão (ListarSensores) colocar a ação de listar os sensores

▪ Porém antes...

Page 30: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ O android studio possui uma funcionalidade de registro de log chamada LogCatque fica localizada na parte inferior da tela com um número 6 na frente, como na imagem

▪ Clicando sobre ele abrirá uma janela local com várias opções e conteúdos, apresento cada um a seguir

Page 31: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

1. Apresenta o dispositivo do qual será observado os Logs

2. Plataforma utilizada

3. Tipos de log (Verbose, Debug, Info, Warn, Error, Asset)

4. A tag de pesquisa

1 2 3 4

Page 32: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ O formato de uma entrada de log é este

▪ Log.i(“TAG a ser pesquisada”,”Mensagem”); //log de informação

▪ Log.e(“TAG a ser pesquisada”,”Mensagem”); //log de erro

Page 33: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Desta forma, ao invés de mostrarmos os sensores na tela do celular, vamos mostrar na tela do LogCat através dos logs

▪ Vamos fazer um teste então, no método ListarSensores crie uma entrada de log conforme abaixo

public void ListarSensores(View view) {Log.i("Teste","Utilizando o Log");

}

▪ Clique em “LogCat” para deixar a janela aberta e execute a aplicação

▪ Deixe o tipo de log como “info” (pois declaramos Log.i)

Page 34: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Assim que a aplicação estiver em execução no aplicativo, pressione o botão “Listar Sensores”, a saída será como abaixo

Page 35: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Muita informação, não é? Para filtrar o clique do botão, vamos digitar no campo de pesquisa a TAG definida previamente chamada “Teste”

▪ No exemplo abaixo o botão foi pressionado 4 vezes e, nas 4 vezes apareceu o log

▪ O log então é utilizado para reportar alguma ocorrência no sistema

Page 36: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Nesta saída é que vamos listar agora os dispositivos presente no seu smartphone

▪ Então vamos ao código, no próximo slide listo apenas o código do método ListarSensores

Page 37: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

public class MainActivity extends AppCompatActivity {

...

public void ListarSensores(View view) {List<Sensor> lista = mSensorManager.getSensorList(Sensor.TYPE_ALL);Iterator<Sensor> iterator = lista.iterator();String sensores = "";while (iterator.hasNext()) {

Sensor sensor = iterator.next();sensores += " - " + sensor.getName() + "\n";

}Log.i("Sensores","Meus sensores: \n"+sensores);

} ...

}

Page 38: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Na primeira linha o método getSensorList nos retorna uma instância de List com os sensores disponíveis de um determinado tipo, ou, de todos os tipos se usarmos a constante TYPE_ALL.

▪ Na segunda foi criada uma instância de Iterator para navegar por todas as instâncias retornadas pela pesquisa feita na primeira linha.

▪ Na quarta linha temos um laço de repetição que possui como argumento de parada o método hasNext() de Iterator.

▪ Cada instância de Sensor presente na lista tem seu nome recuperado (método getName()) e anexado à variável sensores.

▪ Depois, podemos mostrar essa variável no LogCat.

Page 39: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Execute a aplicação

▪ No APP, clique no botão “Listar Sensores”

▪ Na tela do LogCat pesquise pela TAG “Sensores”

Page 40: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Quais sensores meu dispositivo possui?

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Respondendo a pergunta acima então, o meu dispositivo possui os sensores

▪ Esta lista vai variar de dispositivo para dispositivo

▪ Se você estiver testando no emulador, certamente esta lista será muito maior

Page 41: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Testando os sensores

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Nos próximos slides testaremos os 4 tipos de sensores mais comuns nos smartphones (sensores nesta ordem)

▪ Luminosidade

▪ Proximidade

▪ Acelerometro

▪ Gravidade

Page 42: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Criando a interface

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ O primeiro passo será criar os 4 botões necessários para a nossa aplicação

▪ Cada botão ativará um sensor

▪ Veja o código a seguir e não esqueça de que, para cada botão temos que criar uma ação (método) na classe java (já vimos como fazer nesta aula)

▪ Coloque os botões a seguir abaixo do botão Listar Sensores criado anteriormente

Page 43: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Criando a interface

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

...<Button

android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="LUMINOSIDADE"android:text="SENSOR LUMINOSIDADE"/>

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="PROXIMIDADE"android:text="SENSOR PROXIMIDADE"/>

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="ACELEROMETRO"android:text="SENSOR ACELEROMETRO"/>

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="GRAVIDADE"android:text="SENSOR GRAVIDADE"/>

...

Page 44: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Lógica da aplicação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Na classe MainActivity foram criados os 4 métodos

Page 45: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Lógica da aplicação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ O primeiro passo (para todos os sensores) é recuperar uma instância do Sensor desejado.

▪ SensorManager possui um método chamado getDefaultSensor, que retorna uma instância de Sensor e requer um parâmetro do tipo int

▪ Este parâmetro é apresentado no formato de constantes (vide as tabelas do início deste slide, esta constante está presente na coluna “Sensor”)

▪ A linha abaixo recupera do dispositivo o sensor de luminosidade

Sensor mLuz = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

Page 46: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Lógica da aplicação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Criaremos um listener para acompanhar possíveis mudanças nos valores de proximidade e da intensidade de luz ambiente.

▪ Um Listener é um conceito muito utilizado na programação Java, sendo seu objetivo aguardar por uma determinada ação. Pode ser usado para verificar possíveis cliques em um botão, mudanças na posição geográfica do dispositivo, mudanças nos valores de um determinado sensor etc.

Page 47: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Lógica da aplicação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ O registerListener requer três parâmetros:

▪ Uma instância de uma classe que implemente SensorEventListener;

▪ Uma instância da classe Sensor;

▪ Um inteiro que define a taxa de leitura de dados do sensor.

Page 48: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Lógica da aplicação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ A classe SensorManager já nos apresenta algumas constantes para definir a taxa de atualização da leitura dos sensores. Estas constantes são:

▪ SENSOR_DELAY_FASTEST: retorna os dados do sensor o mais rápido possível;

▪ SENSOR_DELAY_GAME: utiliza uma taxa adequada para jogos;

▪ SENSOR_DELAY_NORMAL: taxa adequada para mudanças na orientação da tela;

▪ SENSOR_DELAY_UI: taxa adequada para a interface de usuário.

Page 49: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Luminosidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Na listagem foram criadas duas classes distintas que implementam SensorEventListener.

▪ Ambas precisam implementar os métodos

▪ onAccuracyChanged() ➔ é chamado quando há exatidão dos dados lidos pelo sensor sobre alterações

▪ onSensorChanged() ➔ é chamado quando o hardware intercepta uma leitura do sensor para o qual foi registrada esse listener

▪ No próximo slide será apresentada apenas as alterações na classe MainActivity (o que for novo ficará em vermelho), o restante vamos representar com 3 pontos (...) ou na cor preta

Page 50: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Luminosidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

public class MainActivity extends AppCompatActivity {SensorManager mSensorManager;Sensor mLuz;

...

public void LUMINOSIDADE(View view) {mLuz = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);mSensorManager.registerListener(new LuzSensor(), mLuz, SensorManager.SENSOR_DELAY_FASTEST);

}

class LuzSensor implements SensorEventListener {public void onAccuracyChanged(Sensor sensor, int accuracy) {}

public void onSensorChanged(SensorEvent event) {float vl = event.values[0];Log.i(“Sensores","Luminosidade: "+vl);

}}...

}

Page 51: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Luminosidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Agora, clique para abrir o LogCat, no campo de pesquisa digite Sensores e execute o aplicativo

▪ Clique no botão referente ao botão de luminosidade

▪ Aproxime e afaste a sua mão da tela do dispositivo para que seja possível ver o resultado no LogCat

Page 52: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Proximidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ A lógica para obtenção de dados do sensor de proximidade (e de todos os outros sensores) não se modificam

▪ Assim como no sensor de luminosidade, aqui vou apresentar apenas as alterações na classe MainActivity, alterações referentes ao sensor de proximidade (ficará em vermelho)

Page 53: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Proximidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

public class MainActivity extends AppCompatActivity {SensorManager mSensorManager;Sensor mLuz, mProx;

...

public void PROXIMIDADE(View view) {mProx = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);mSensorManager.registerListener(new ProxSensor(), mProx, SensorManager.SENSOR_DELAY_FASTEST);

}

class ProxSensor implements SensorEventListener {public void onAccuracyChanged(Sensor sensor, int accuracy) {}

public void onSensorChanged(SensorEvent event) {float vl = event.values[0];Log.i(“Sensores",“Proximidade: "+vl);

}}...

}

Page 54: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Proximidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Agora, clique para abrir o LogCat, no campo de pesquisa digite Sensores e execute o aplicativo

▪ Clique no botão referente ao sensor de Proximidade

▪ Aproxime e afaste a sua mão da tela do dispositivo para que seja possível ver o resultado no LogCat

▪ Alguns modelos de dispositivos apresentarão a distância em centímetros, outros apresentação na forma binária (0 ou 1) para indicar se está próximo ou longe

Page 55: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Gravidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ A lógica para obtenção de dados do sensor de gravidade (e de todos os outros sensores) não se modificam

▪ Assim como nos sensores anteriores, aqui vou apresentar apenas as alterações na classe MainActivity, alterações referentes ao sensor de gravidade (ficará em vermelho)

Page 56: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Gravidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

public class MainActivity extends AppCompatActivity {SensorManager mSensorManager;Sensor mLuz, mProx, mGravidade;

...

public void GRAVIDADE(View view) {mGravidade = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);mSensorManager.registerListener(new GravidadeSensor(), mGravidade, SensorManager.SENSOR_DELAY_FASTEST);

}

class GravidadeSensor implements SensorEventListener {public void onAccuracyChanged(Sensor sensor, int accuracy) {}

public void onSensorChanged(SensorEvent event) {float vl = event.values[0];float v2 = event.values[1];float v3 = event.values[2];Log.i("Sensores","Gravidade: eixo X: "+vl+", eixo Y: "+v2+", eixo Z: "+v3)

}}...

}

Page 57: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Gravidade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Agora, clique para abrir o LogCat, no campo de pesquisa digite Sensores e execute o aplicativo

▪ Clique no botão referente ao sensor de Gravidade

▪ Movimente o dispositivo para que seja possível ver o resultado no LogCat

▪ No log serão apresentados 3 valores

▪ Gravidade no eixo X, no eixo Y e no eixo Z

Page 58: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Acelerômetro

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ A lógica para obtenção de dados do sensor de acelerômetro (e de todos os outros sensores) não se modificam

▪ Assim como nos sensores anteriores, aqui vou apresentar apenas as alterações na classe MainActivity, alterações referentes ao sensor de acelerômetro (ficará em vermelho)

Page 59: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Acelerômetro

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

public class MainActivity extends AppCompatActivity {SensorManager mSensorManager;Sensor mLuz, mProx, mGravidade, mAcelerometro;

...

public void ACELEROMETRO(View view) {mAcelerometro = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);mSensorManager.registerListener(new GravidadeSensor(), mAcelerometro, SensorManager.SENSOR_DELAY_FASTEST);

}

class AcelerometroSensor implements SensorEventListener {public void onAccuracyChanged(Sensor sensor, int accuracy) {}

public void onSensorChanged(SensorEvent event) {float vl = event.values[0];float v2 = event.values[1];float v3 = event.values[2];Log.i("Sensores",“Acelerômetro: eixo X: "+vl+", eixo Y: "+v2+", eixo Z: "+v3)

}}...

}

Page 60: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Sensor de Acelerômetro

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Agora, clique para abrir o LogCat, no campo de pesquisa digite Sensores e execute o aplicativo

▪ Clique no botão referente ao sensor de Gravidade

▪ Movimente o dispositivo para que seja possível ver o resultado no LogCat

▪ No log serão apresentados 3 valores

▪ Gravidade no eixo X, no eixo Y e no eixo Z

Page 61: Programação para Dispositivos Móveisarieldias.com/material/2019-1/PDM/Aula3n.pdf · Programação para Dispositivos Móveis Sensores. Introdução Smartphones podem possuir pelo

Atividade

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ O seu dispositivo possui algum sensor diferente dos 4 listados anteriormente? Crie um botão para ele e monte toda a rotina para obtenção de dados do mesmo