Utilizando Os Sensores Do Android Em Sua Aplicação Para Monitoramento Do Ambiente Externo _...

12
23/12/2014 Utilizando os sensores do Android em sua aplicação para monitoramento do ambiente externo | klebermota.eti.br http://www.klebermota.eti.br/2010/11/22/utilizandoossensoresdoandroidemsuaaplicacaoparamonitoramentodoambienteexterno/ 1/12 Utilizando os sensores do Android em sua aplicação para monitoramento do ambiente externo A plataforma Android é idela, especialmente por causa dos desenvolvvedores Java, para criar aplicações inovadoras que fazem uso de sensores de hardware. Vamos ver nesse artigo algumas das opções de interface disponiveis para aplicações Android, incluindo o uso do sub-sistema de sensores e gravação de trechos de audio. Que tipo de aplicações você pode construir que possam tirar vantagem dos recursos do hardware de um dispositivo Android? Qualquer coisa que precise de olhos ou ouvidos eletrônicos é um bom candidato. Uma babá eletrônica, sistema de segurança, ou mesmo um sismógrafo vem a mente. Ao longo desse artigo, tenha em mente que um dispositivo Android não é meramente um “telefone celular” mas também um dispositivo localizado em uma localização 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 próprio dispositivo. Historicamente, a falta de acesso ao hardware de um dispositivo tem sido frustante para os desenvolvedores de aplicações móveis. Ainda que o ambiente Java do Android ainda fique entre você e o metal, o time de desenvolvimento do Android trouxe OFERTA RELÂMPAGO DELL Inspiron 14 Série 3000 com HD500, Frete Grátis e Intel® Core. Veja!

description

Sensores

Transcript of Utilizando Os Sensores Do Android Em Sua Aplicação Para Monitoramento Do Ambiente Externo _...

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    Utilizando os sensores do Android em suaaplicao para monitoramento do ambienteexterno

    A plataforma Android idela, especialmente por causa dos desenvolvvedoresJava, para criar aplicaes inovadoras que fazem uso de sensores de hardware.Vamos ver nesse artigo algumas das opes de interface disponiveis paraaplicaes Android, incluindo o uso do sub-sistema de sensores e gravao detrechos de audio.

    Que tipo de aplicaes voc pode construir que possam tirar vantagem dosrecursos do hardware de um dispositivo Android? Qualquer coisa que precise deolhos ou ouvidos eletrnicos um bom candidato. Uma bab eletrnica, sistemade segurana, ou mesmo um sismgrafo vem a mente. Ao longo desse artigo,tenha em mente que um dispositivo Android no meramente um telefonecelular mas tambm um dispositivo localizado em uma localizao fixa comconectividade de rede sem fio, como EDGE ou WiFi.

    Recursos de sensor do Android

    Um aaspecto novo de trabalhar com a plataforma Android que voc podeacessar alguns dos recursos de dentro do prprio dispositivo. Historicamente, afalta de acesso ao hardware de um dispositivo tem sido frustante para osdesenvolvedores de aplicaes mveis. Ainda que o ambiente Java do Androidainda fique entre voc e o metal, o time de desenvolvimento do Android trouxe

    O F E R T A R E L M P A G O D E L L Inspiron 14 Srie 3000 com HD500, Frete Grtis e Intel Core. Veja!

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    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 seguirpelos exemplos desse artigo. O pacote android.media contm classes quefornecem funes teis.

    Algumas das caractersticas baseadas no hardware expostas no SDK do Androidso descritas abaixo.

    Caracterstica Descrio

    android.hardware.Camera A class that enables your applicationto interact with the camera to snap aphoto, acquire images for a previewscreen, and modify parameters usedto govern how the camera operates.

    android.hardware.SensorManager A class that permits access to thesensors available within the Androidplatform. Not every Android-equippeddevice will support all of the sensorsin the SensorManager, though itsexciting to think about thepossibilities. (See below for a briefdiscussion of available sensors.)

    android.hardware.SensorListener An interface implemented by a classthat wants to receive updates tosensor values as they change in realtime. An application implements thisinterface to monitor one or moresensors available in the hardware. Forexample, the code in this articlecontains a class that implements thisinterface to monitor the orientation ofthe device and the built-inaccelerometer.

    android.media.MediaRecorder A class, used to record media samples,that can be useful for recording audioactivity within a specific location(such as a baby nursery). Audio

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    clippings can also be analyzed foridentification purposes in an access-control or security application. Forexample, it could be helpful to openthe door to your time-share with yourvoice, rather than having to meet withthe realtor to get a key.

    android.FaceDetector A class that permits basic recognitionof a persons face as contained in abitmap. You cannot get much morepersonal than your face. Using this asa device lock means no morepasswords to remember biometricscapability on a cell phone.

    android.os.* A package containing several usefulclasses for interacting with theoperating environment, includingpower management, file watcher,handler, and message classes. Likemany portable devices, Android-powered phones can consume atremendous amount of power.Keeping a device awake at the righttime to be in position to monitor anevent of interest is a design aspect thatdeserves attention up front.

    java.util.Date

    java.util.Timer

    java.util.TimerTask

    When measuring events in the realworld, date and time are oftensignificant. For example, thejava.util.Date class lets you get a timestamp when a particular event orcondition is encountered. You can usejava.util.Timer andjava.util.TimerTask to performperiodic tasks, or point-in-time tasks,respectively.

    O pacote android.hardware.SensorManager contm muitas constantes, querepresentam diferentes aspectos do sistema de sensores do Android, que

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    incluem:

    Tipo do sensorOrientao, acelermetro, iluminao, campo magntico, proximidade,temperatura, etc.

    AmostragemRpido, jogo, normal, interface do usurio. Quando uma aplicao solicita umataxa de amostragem especifica, apenas uma dica ou sugesto para o sub-sistema de sensores. No existe nenhuma garantia que uma taxa em particularesteja disponivel.

    PrecisoAlta, baixa, mdia, incerto.

    A interface SensorListener a base para as aplicaes que usam sensores. Elainclue dois metdos necessrios:

    onSensorChanged(int sensor, float values[]): invocado toda vez que o valordo sensor mudado. O metdo invocado apenas para sensores que estosendo monitorados por essa aplicao (mais sobre isso abaixo). Osargumentos do metdo incluem um inteiro que identifica o sensor que sofreualterao, assim como um array de valores que representam os dados dosensor. Alguns sensores fornecem apenas um nico valor, enquanto outrosfornecem trs valores. Os sensores de orientao e acelermetro fornecemcada um trs valores.onAcurracyChanged(int sensor, int accuracy): invocado quando a precisode um sensor muda. Os argumentos so dois inteiro: Um representa o sensorque mudou e o outro representa a nova preciso do sensor.

    Para interagir com um sensor, uma aplicao precisa registrar que querescutar um ou mais sensores. O registro feito com o metdo registerListernerda classe SensorManager. O cdigo exemplo desse artigo demonstra como umaaplicao registra um SensorListener.

    Lembre que nem todos os dispositivos Android suportam algum dos ou todos ossensores definidos no SDK. Sua aplicao precisa saber quais sensores estodisponveis para seu uso no dispositivo que est sendo executada.

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    klebermota.eti.brBlogsobrecincia,computaoeprojetosrelacionados

    Segurana DigitalCom a Embratel, Sua Empresa se

    Exemplo de uso de um sensor

    A aplicao exemplo simplesmente monitora mudanas nos sensores deorientao e acelermetro. Quando mudanas so detectadas, os valores dossensores so mostrados na tela em um TextView. A Figura abaixo mostra aaplicao em ao.

    A aplicao foi criada usando o ambiente Eclipse como o plugin ADT. (Para maisinformao sobre o desenvolvimento de aplicaes Android com o Eclipse, cliqueaqui). A Listagem abaixo mostra o cdigo dessa aplicao.

    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;

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

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

    /** 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();

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    }}

    A aplicao foi escrita como uma aplicao normal baseada em activity porquefaz simplesmente atualizar a tela com dados obtidos dos sensores. Em umaaplicao onde o dispositivo pode estar executando outras atividades emsegundo plano, construir a aplicao como um Service pode ser mais apropriado.

    O metdo onCreate da Activity pega uma referncia para o SensorManager, ondetodas as funes relacionadas a sensores so baseadas. O metdo tambm criareferncias para seis TextViews necessrios para a exibio dos dados dossensores.

    O metdo onResume() usa a referncia ao SensorManager para registrar pormudanas nos sensores atravs do metdo registerListerner:

    O primeiro parmetro uma instncia da classe que implementa a interfaceSensorListener.O segundo parmetro uma mscara de bits para o sensor desejado. Nessecaso, a aplicao est requisitando dados de SENSOR_ORIENTATION eSENSOR_ACCELEROMETER.O terceiro parmetro uma dica para o sistema que indica rapidamente comoa aplicao solicita atualizaes nos valores do sensor.

    Quando a aplicaao pausada, voc precisa cancelar o registro ao listener assimvoc no recebe mais atualizaes dos sensores. Isso feito pelo metdounregisterListener do SensorManager. O nico parmetro a instncia doSensorListener.

    Em ambas as chamadas dos metdos registerListener e unregisterListener, aaplicao usa a palavra-chave this. Note que a palavra-chave implements nadefinicao da classe onde declarado que essa classe implementa a interfaceSensorListener. Esse o motivo porqu voc pode passar this para os metdoscitados.

    Um SensorListener precisa implementar os metdos onSensorChanger eonAccuracyChanged. A aplicao do exemplo no se preocupa realmente como apreciso dos sensores, mais como os valores atuais de X, Y e Z. O metdoonAccuracyChanged est fazendo essencialmente nada; s cria uma novaentrada no arquivo de log a cada vez que invocado.

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    Parece que o metdo onSensorChanged invocado constantemente, j que ossensores do acelermetro e da orientao ficam rapidamente enviando dados. Duma olhada no primeiro parmetro para determinar qual sensor est enviandodados. Assim que o sensor identificado, o elemento da interfacecorrespondente atualizado com os dados contidos no array de valores passadocomo segundo argumento do metdo. Enquanto no exemplo os dados so apenasexibidos, em aplicaes mais complexas os valores so analizados, comparadoscom valores anteriores, ou passados por algum algoritmo de reconhecimento depadres 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 demdia. A classe android.media.MediaRecorder usada para capturar pedaos demdia, incluindo audio e video. A MediaRecorder funciona como uma mquinade estado. Voc precisa configurar vrios parmetros, como dispositivo deorigem e formato. Assim que as configuraes forem concluidas, a gravao podecomear por um periodo arbitrrio de tempo at que seja terminado.

    A listagem abaixo traz um cdigo para realizar gravaes de audio em umdispositivo Android. O cdigo mostrado no inclui os elementos da interface daaplicao.

    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; } }

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    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 einicializada:

    A fonte de entrada configurada como sendo o microfone (MIC).O formato de saida configurada como 3GPP que um formato de mdiaespecifica para dispositivos mveis.O encoder configurado para AMR_NB, que um formato de audio comamostragem de 8 KHZ. O NB a largura de banda. A documentao do SDKexplica os diferentes formatos e encoders disponiveis.

    O arquivo de audio armazenado no carto SD, ao invs da memria interna. Ometdo External.getExternalStorageDirectory() retorna o nome do diretrio docarto, e um arquivo temporrio criado nesse diretrio. Esse arquivo entoassociado com a instncia do MediaRecorder pela chamada do metdosetOutputFile. Os dados do audio sero armazenados nesse arquivo.

    O metdo prepare invocado para finalizar a incializao do MediaRecorder.

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    Quando voc estiver pronto para o inicio do processo de gravao, o metdo start chamado. A gravao grava os dados capturados no arquivo localizado nocarto at que o metdo stop invocado. O metdo release libera os recursosalocados pela instncia de MediaRecorder.

    Assim que o audio tiver sido capturado, existem algumas que aes que podemser executadas:

    Adicionar o arquivo de audio a biblioteca de mdia do dispositivo.Executar algum algoritmo de reconhecimento de padro para identificar osom:

    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 serprocessado.

    No cdigo exemplo, o metdo processaudiofile adiciona o arquivo biblioteca demdia. Um Intend usado para notificar a aplicao de mdia que um novocontedo est disponivel.

    Uma observao final sobre o pedao de cdigo: Se voc o executar, o audio noser gravado de primeira. Voc ver que um arquivo foi criado, mas semnenhum audio. Voc precisa adicionar a seguinte permisso no arquivoAndroidManisfest.xml:

    Fonte: http://www.ibm.com/developerworks/opensource/library/os-android-sensor/index.html

    Tweet 14 Compartilhar 0

    Related posts:

    1. Exemplo prtico de aplicao grfica (Swing) utilizando Java Ola pessoal, omaterial disponvel aqui foi produzido especialmente para quem esta comeando a desenhar interfaces

    grficas utilizando a linguagem...

    11Like

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    2. Como criar Servios em aplicaes Android No ambiente Android, temos umaferramenta 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 debanco de dados sem-servidor de cdigo aberto. Suporta transaes e no requer nenhuma

    configurao....

    4. Assinando aplicaes Android para lanamento pblico O sistema Androidrequer que todas as aplicaes instaladas sejam assinadas digitalmente com um certificado cuja chave

    privada mantida...

    5. Primeiros passos com Android: Criando um Hello World Comodesenvolverdor, 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

  • 23/12/2014 UtilizandoossensoresdoAndroidemsuaaplicaoparamonitoramentodoambienteexterno|klebermota.eti.br

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

    TutorialdeCanvasParte3Usandoimagens2comentrios8monthsago

    GuestOlkleber,excelentepost,tenhoumadvida:consigogerarodata:URL,copioeatravsdeumgerenciadordemysqlgravoemumcampoblobeconsigorecuperaraimagem,no

    ComousarumGravadorDigitalPorttilemumagravaodevdeo1comentrio8monthsago

    ChristianBaptistellaBoatarde,amigo!Gostariadesaberse,aoplugarummicexterno,osmicsdogravadorporttilsodesativados,ousehalgumaformadegravarcomo"3"mics(2

    UsandoacmeranoAndroid(Traduodadocumentaooficial)1comentrio8monthsago

    WellingtonLopesOlKleber,estoutentandoimplementaremminhaaplicao,acamerasemvisualizaodaimagem,ouseja,aopressionarumboto,sertiradoafotosemqueo

    Comogravarudiodealtaqualidadeparafilmes2comentrios8monthsago

    KleberMotaRonaldo,vocpodeconectaromicrofonediretamenteaogravadorzoomsemproblema,tomandoocuidadodefazermarcaesnagravaoparaocasodeserpreciso

    TAMBMEMBLOGKLEBERMOTA

    1Comentrio BlogKleberMota Entrar

    OrdenarporMaisrecente Compartilhar

    Participedadiscusso...

    Responder

    DouglasMareli 4yearsagoBoatraduo.Pormnemaquinemnafontefalasobreoarquivobuild.xmlqueessencialparaconstruiraclasseR.AclasseR,porsuavez,contematributosnecessriosparaofuncionamentodomtodoonCreatepertencenteaclasseIBMEyes.

    OQUEISSO?

    Favorito

    Compartilhar

    Orgulhosamente desenvolvido com WordPress