Vous êtes sur la page 1sur 12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

Utilizando os sensores do Android em sua


aplicao para monitoramento do ambiente
externo

OFERTA

RELMPAGO

DELL

Inspiron 14 Srie 3000 com HD500, Frete Grtis e Intel Core. Veja!

A plataforma Android idela, especialmente por causa dos desenvolvvedores


Java, para criar aplicaes inovadoras que fazem uso de sensores de hardware.
Vamos ver nesse artigo algumas das opes de interface disponiveis para
aplicaes Android, incluindo o uso do sub-sistema de sensores e gravao de
trechos de audio.
Que tipo de aplicaes voc pode construir que possam tirar vantagem dos
recursos do hardware de um dispositivo Android? Qualquer coisa que precise de
olhos ou ouvidos eletrnicos um bom candidato. Uma bab eletrnica, sistema
de segurana, ou mesmo um sismgrafo vem a mente. Ao longo desse artigo,
tenha em mente que um dispositivo Android no meramente um telefone
celular mas tambm um dispositivo localizado em uma localizao fixa com
conectividade de rede sem fio, como EDGE ou WiFi.

Recursos de sensor do Android


Um aaspecto novo de trabalhar com a plataforma Android que voc pode
acessar alguns dos recursos de dentro do prprio dispositivo. Historicamente, a
falta de acesso ao hardware de um dispositivo tem sido frustante para os
desenvolvedores de aplicaes mveis. Ainda que o ambiente Java do Android
ainda fique entre voc e o metal, o time de desenvolvimento do Android trouxe
http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

1/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

muito dos recursos do hardware para a superficie.


Se ainda no o tiver feito, voc deve agora baixar e instalar o SDK do Android.
Voc pode tambm visualizar o contedo do pacote android.hardware e seguir
pelos exemplos desse artigo. O pacote android.media contm classes que
fornecem funes teis.
Algumas das caractersticas baseadas no hardware expostas no SDK do Android
so descritas abaixo.
Caracterstica

Descrio

android.hardware.Camera

A class that enables your application


to interact with the camera to snap a
photo, acquire images for a preview
screen, and modify parameters used
to govern how the camera operates.

android.hardware.SensorManager

A class that permits access to the


sensors available within the Android
platform. Not every Android-equipped
device will support all of the sensors
in the SensorManager, though its
exciting to think about the
possibilities. (See below for a brief
discussion of available sensors.)

android.hardware.SensorListener

An interface implemented by a class


that wants to receive updates to
sensor values as they change in real
time. An application implements this
interface to monitor one or more
sensors available in the hardware. For
example, the code in this article
contains a class that implements this
interface to monitor the orientation of
the device and the built-in
accelerometer.

android.media.MediaRecorder

A class, used to record media samples,


that can be useful for recording audio
activity within a specific location
(such as a baby nursery). Audio

http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

2/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

clippings can also be analyzed for


identification purposes in an accesscontrol or security application. For
example, it could be helpful to open
the door to your time-share with your
voice, rather than having to meet with
the realtor to get a key.
android.FaceDetector

A class that permits basic recognition


of a persons face as contained in a
bitmap. You cannot get much more
personal than your face. Using this as
a device lock means no more
passwords to remember biometrics
capability on a cell phone.

android.os.*

A package containing several useful


classes for interacting with the
operating environment, including
power management, file watcher,
handler, and message classes. Like
many portable devices, Androidpowered phones can consume a
tremendous amount of power.
Keeping a device awake at the right
time to be in position to monitor an
event of interest is a design aspect that
deserves attention up front.

java.util.Date

When measuring events in the real

java.util.Timer

world, date and time are often

java.util.TimerTask

significant. For example, the


java.util.Date class lets you get a time
stamp when a particular event or
condition is encountered. You can use
java.util.Timer and
java.util.TimerTask to perform
periodic tasks, or point-in-time tasks,
respectively.

O pacote android.hardware.SensorManager contm muitas constantes, que


representam diferentes aspectos do sistema de sensores do Android, que
http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

3/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

incluem:
Tipo do sensor
Orientao, acelermetro, iluminao, campo magntico, proximidade,
temperatura, etc.
Amostragem
Rpido, jogo, normal, interface do usurio. Quando uma aplicao solicita uma
taxa de amostragem especifica, apenas uma dica ou sugesto para o subsistema de sensores. No existe nenhuma garantia que uma taxa em particular
esteja disponivel.
Preciso
Alta, baixa, mdia, incerto.
A interface SensorListener a base para as aplicaes que usam sensores. Ela
inclue dois metdos necessrios:
onSensorChanged(int sensor, float values[]): invocado toda vez que o valor
do sensor mudado. O metdo invocado apenas para sensores que esto
sendo monitorados por essa aplicao (mais sobre isso abaixo). Os
argumentos do metdo incluem um inteiro que identifica o sensor que sofreu
alterao, assim como um array de valores que representam os dados do
sensor. Alguns sensores fornecem apenas um nico valor, enquanto outros
fornecem trs valores. Os sensores de orientao e acelermetro fornecem
cada um trs valores.
onAcurracyChanged(int sensor, int accuracy): invocado quando a preciso
de um sensor muda. Os argumentos so dois inteiro: Um representa o sensor
que mudou e o outro representa a nova preciso do sensor.
Para interagir com um sensor, uma aplicao precisa registrar que quer
escutar um ou mais sensores. O registro feito com o metdo registerListerner
da classe SensorManager. O cdigo exemplo desse artigo demonstra como uma
aplicao registra um SensorListener.
Lembre que nem todos os dispositivos Android suportam algum dos ou todos os
sensores definidos no SDK. Sua aplicao precisa saber quais sensores esto
disponveis para seu uso no dispositivo que est sendo executada.

http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

4/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

Exemplo de uso de um sensor


A aplicao exemplo simplesmente monitora mudanas nos sensores de
orientao e acelermetro. Quando mudanas so detectadas, os valores dos
sensores so mostrados na tela em um TextView. A Figura abaixo mostra a
aplicao em ao.

A aplicao foi criada usando o ambiente Eclipse como o plugin ADT. (Para mais
informao sobre o desenvolvimento de aplicaes Android com o Eclipse, clique

klebermota.eti.br

aqui). A Listagem abaixo mostra o cdigo dessa aplicao.

Blogsobrecincia,computaoeprojetosrelacionados

package com.msi.ibm.eyes;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.hardware.SensorManager;
import android.hardware.SensorListener;
public class IBMEyes extends Activity implements SensorListener {
final String tag = "IBMEyes";
SensorManager sm = null;
TextView xViewA = null;
TextView yViewA = null;
TextView zViewA = null;

Segurana Digital

Com a Embratel, Sua Empresa se

http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

5/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

Com
a Embratel,
Sua Empresa se
TextView
xViewO = null;
TextView yViewO = null;
Conecta
zViewO
Web com
TextView
= null;Toda Segurana!

/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get reference to SensorManager
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
setContentView(R.layout.main);
xViewA = (TextView) findViewById(R.id.xbox);
yViewA = (TextView) findViewById(R.id.ybox);
zViewA = (TextView) findViewById(R.id.zbox);
xViewO = (TextView) findViewById(R.id.xboxo);
yViewO = (TextView) findViewById(R.id.yboxo);
zViewO = (TextView) findViewById(R.id.zboxo);
}
public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
Log.d(tag, "onSensorChanged: " + sensor + ", x: " +
values[0] + ", y: " + values[1] + ", z: " + values[2]);
if (sensor == SensorManager.SENSOR_ORIENTATION) {
xViewO.setText("Orientation X: " + values[0]);
yViewO.setText("Orientation Y: " + values[1]);
zViewO.setText("Orientation Z: " + values[2]);
}
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
xViewA.setText("Accel X: " + values[0]);
yViewA.setText("Accel Y: " + values[1]);
zViewA.setText("Accel Z: " + values[2]);
}
}
}
public void onAccuracyChanged(int sensor, int accuracy) {
Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " +
accuracy);
}
@Override
protected void onResume() {
super.onResume();
// register this class as a listener for the orientation and
accelerometer sensors
sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION
|SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onStop() {
// unregister listener
sm.unregisterListener(this);
super.onStop();
http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

6/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

}
}

A aplicao foi escrita como uma aplicao normal baseada em activity porque
faz simplesmente atualizar a tela com dados obtidos dos sensores. Em uma
aplicao onde o dispositivo pode estar executando outras atividades em
segundo plano, construir a aplicao como um Service pode ser mais apropriado.
O metdo onCreate da Activity pega uma referncia para o SensorManager, onde
todas as funes relacionadas a sensores so baseadas. O metdo tambm cria
referncias para seis TextViews necessrios para a exibio dos dados dos
sensores.
O metdo onResume() usa a referncia ao SensorManager para registrar por
mudanas nos sensores atravs do metdo registerListerner:
O primeiro parmetro uma instncia da classe que implementa a interface
SensorListener.
O segundo parmetro uma mscara de bits para o sensor desejado. Nesse
caso, a aplicao est requisitando dados de SENSOR_ORIENTATION e
SENSOR_ACCELEROMETER.
O terceiro parmetro uma dica para o sistema que indica rapidamente como
a aplicao solicita atualizaes nos valores do sensor.
Quando a aplicaao pausada, voc precisa cancelar o registro ao listener assim
voc no recebe mais atualizaes dos sensores. Isso feito pelo metdo
unregisterListener do SensorManager. O nico parmetro a instncia do
SensorListener.
Em ambas as chamadas dos metdos registerListener e unregisterListener, a
aplicao usa a palavra-chave this. Note que a palavra-chave implements na
definicao da classe onde declarado que essa classe implementa a interface
SensorListener. Esse o motivo porqu voc pode passar this para os metdos
citados.
Um SensorListener precisa implementar os metdos onSensorChanger e
onAccuracyChanged. A aplicao do exemplo no se preocupa realmente como a
preciso dos sensores, mais como os valores atuais de X, Y e Z. O metdo
onAccuracyChanged est fazendo essencialmente nada; s cria uma nova
entrada no arquivo de log a cada vez que invocado.
http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

7/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

Parece que o metdo onSensorChanged invocado constantemente, j que os


sensores do acelermetro e da orientao ficam rapidamente enviando dados. D
uma olhada no primeiro parmetro para determinar qual sensor est enviando
dados. Assim que o sensor identificado, o elemento da interface
correspondente atualizado com os dados contidos no array de valores passado
como segundo argumento do metdo. Enquanto no exemplo os dados so apenas
exibidos, em aplicaes mais complexas os valores so analizados, comparados
com valores anteriores, ou passados por algum algoritmo de reconhecimento de
padres que determinam o que o usurio est fazendo.

Usando o Gravador de mdia


O pacote android.media contm classes que interagem com o sub-ssitema de
mdia. A classe android.media.MediaRecorder usada para capturar pedaos de
mdia, incluindo audio e video. A MediaRecorder funciona como uma mquina
de estado. Voc precisa configurar vrios parmetros, como dispositivo de
origem e formato. Assim que as configuraes forem concluidas, a gravao pode
comear por um periodo arbitrrio de tempo at que seja terminado.
A listagem abaixo traz um cdigo para realizar gravaes de audio em um
dispositivo Android. O cdigo mostrado no inclui os elementos da interface da
aplicao.

MediaRecorder mrec ;
File audiofile = null;
private static final String TAG="SoundRecordingDemo";
protected void startRecording() throws IOException
{
mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
mrec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
if (mSampleFile == null)
{
File sampleDir = Environment.getExternalStorageDirectory();
try
{
audiofile = File.createTempFile("ibm", ".3gp", sampleDir);
}
catch (IOException e)
{
Log.e(TAG,"sdcard access error");
return;
}
}
http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

8/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

mrec.setOutputFile(audiofile.getAbsolutePath());
mrec.prepare();
mrec.start();
}
protected void stopRecording()
{
mrec.stop();
mrec.release();
processaudiofile(audiofile.getAbsolutePath());
}
protected void processaudiofile()
{
ContentValues values = new ContentValues(3);
long current = System.currentTimeMillis();
values.put(MediaStore.Audio.Media.TITLE, "audio" +
audiofile.getName());
values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current /
1000));
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath());
ContentResolver contentResolver = getContentResolver();
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri newUri = contentResolver.insert(base, values);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
newUri));
}

No metdo startRecording, uma instncia de MediaRecorder instnciada e


inicializada:
A fonte de entrada configurada como sendo o microfone (MIC).
O formato de saida configurada como 3GPP que um formato de mdia
especifica para dispositivos mveis.
O encoder configurado para AMR_NB, que um formato de audio com
amostragem de 8 KHZ. O NB a largura de banda. A documentao do SDK
explica os diferentes formatos e encoders disponiveis.
O arquivo de audio armazenado no carto SD, ao invs da memria interna. O
metdo External.getExternalStorageDirectory() retorna o nome do diretrio do
carto, e um arquivo temporrio criado nesse diretrio. Esse arquivo ento
associado com a instncia do MediaRecorder pela chamada do metdo
setOutputFile. Os dados do audio sero armazenados nesse arquivo.
O metdo prepare invocado para finalizar a incializao do MediaRecorder.
http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

9/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

Quando voc estiver pronto para o inicio do processo de gravao, o metdo start
chamado. A gravao grava os dados capturados no arquivo localizado no
carto at que o metdo stop invocado. O metdo release libera os recursos
alocados pela instncia de MediaRecorder.
Assim que o audio tiver sido capturado, existem algumas que aes que podem
ser executadas:
Adicionar o arquivo de audio a biblioteca de mdia do dispositivo.
Executar algum algoritmo de reconhecimento de padro para identificar o
som:
um beb chorando?
a voz do dono, e devemos desbloquear o telefone?
a frase abre-te sesame que destrava a porta da entrada secreta?
Automaticamente fazer o upload do arquivo para um local da rede para ser
processado.
No cdigo exemplo, o metdo processaudiofile adiciona o arquivo biblioteca de
mdia. Um Intend usado para notificar a aplicao de mdia que um novo
contedo est disponivel.
Uma observao final sobre o pedao de cdigo: Se voc o executar, o audio no
ser gravado de primeira. Voc ver que um arquivo foi criado, mas sem
nenhum audio. Voc precisa adicionar a seguinte permisso no arquivo
AndroidManisfest.xml:

<uses-permission android:name="android.permission.RECORD_AUDIO"></usespermission>

Fonte: http://www.ibm.com/developerworks/opensource/library/os-androidsensor/index.html
Like

11

Tweet

14

Compartilhar

Related posts:
1. Exemplo prtico de aplicao grfica (Swing) utilizando Java Ola pessoal, o
material disponvel aqui foi produzido especialmente para quem esta comeando a desenhar interfaces
grficas utilizando a linguagem...

http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

10/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

2. Como criar Servios em aplicaes Android No ambiente Android, temos uma


ferramenta interessante para executar aplicaes ou processos em segundo plano, que so os Servios.
Neste...

3. Criando um banco de dados SQLite com Android O SQLite um mecanismo de


banco de dados sem-servidor de cdigo aberto. Suporta transaes e no requer nenhuma
configurao....

4. Assinando aplicaes Android para lanamento pblico O sistema Android


requer que todas as aplicaes instaladas sejam assinadas digitalmente com um certificado cuja chave
privada mantida...

5. Primeiros passos com Android: Criando um Hello World Como


desenvolverdor, voc sabe que a primeira impresso sobre um determinado ambiente de
desenvolvimento to fcil quanto escrever Hello...

22denovembrode2010 KleberMota Android acelerometro,Android,camera,


gravaodeaudio,sensores

http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

11/12

23/12/2014

UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

1Comentrio

BlogKleberMota

OrdenarporMaisrecente

Entrar

Compartilhar Favorito

Participedadiscusso...
DouglasMareli 4yearsago

Boatraduo.Pormnemaquinemnafontefalasobreoarquivobuild.xml
queessencialparaconstruiraclasseR.AclasseR,porsuavez,contem
atributosnecessriosparaofuncionamentodomtodoonCreatepertencente
aclasseIBMEyes.

Responder Compartilhar

OQUEISSO?

TAMBMEMBLOGKLEBERMOTA

TutorialdeCanvasParte3
Usandoimagens

ComousarumGravadorDigital
Porttilemumagravaodevdeo

2comentrios8monthsago

1comentrio8monthsago

GuestOlkleber,excelentepost,

ChristianBaptistellaBoatarde,

tenhoumadvida:consigogeraro
data:URL,copioeatravsdeum
gerenciadordemysqlgravoemum
campoblobeconsigorecuperara
UsandoacmeranoAndroid
imagem,no
(Traduodadocumentaooficial)

amigo!Gostariadesaberse,aoplugar
ummicexterno,osmicsdogravador
porttilsodesativados,ouseh
algumaformadegravarcomo"3"
Comogravarudiodealta
mics(2
qualidadeparafilmes

1comentrio8monthsago

2comentrios8monthsago

WellingtonLopesOlKleber,estou

KleberMotaRonaldo,vocpode

tentandoimplementaremminha
aplicao,acamerasemvisualizao
daimagem,ouseja,aopressionarum
boto,sertiradoafotosemqueo

conectaromicrofonediretamenteao
gravadorzoomsemproblema,
tomandoocuidadodefazermarcaes
nagravaoparaocasodeserpreciso

Orgulhosamente desenvolvido com WordPress

http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/

12/12

Vous aimerez peut-être aussi