Como usar a API do Acelerômetro no BlackBerry Storm?

bbstorm1.jpgO uso de acelerômetro abre muitas possibilidades legais de desenvolvimento, e agora que o novíssimo BlackBerry Storm possui esse recurso, vale a pena explorá-lo.

Para usar o acelerômetro no BlackBerry Storm você precisa desenvolver usando API nativa, 4.7 ou superior.

É muito simples de usar. Basta que você leia as posições XYZ do acelerômetro, indicando um vetor short para que a API escreva nesse vetor as três posições.

Veja como é fácil:

public short[] leAcelerometro() {
    short[] xyz = new short[3];
    canal.getLastAccelerationData(xyz);
    return xyz;
}

O método acima retorna um vetor com as posições XYZ do acelerômetro.

No entanto, antes de ler o acelerômetro, é necessário abrir um canal com o hardware dele, e fechá-lo quando não for mais necessário fazer leitura do acelerômetro. Você só deve abrir o canal quando realmente for iniciar o uso do acelerômetro, fazendo várias leituras seguidas.

Para abrir e fechar o canal, use os seguintes métodos:

//Abre o canal
Channel canal = AccelerometerSensor.openRawDataChannel(Application.getApplication());
//Fecha o canal aberto
canal.close();

Preparei uma classe de leitura do acelerômetro que pode ajudar. Ela mantém uma única instância dela mesma, e garante que não serão abertos vários canais de leitura do acelerômetro.

Você poderá usar à vontade:

import net.rim.device.api.system.AccelerometerSensor;
import net.rim.device.api.system.AccelerometerSensor.Channel;
import net.rim.device.api.system.Application;
/**
 * Classe controladora de acelerômetro.
 * @author Nelson Pereira Junior - www.devmobile.blog.br
 */
public class Acelerometro {
    private static Acelerometro instancia;
    private boolean instanciado = false;
    private Channel canal = null;
    private boolean aberto = false;
    private short[] xyz = {0, 0, 0};
    /**
     * Gera uma única instância para o controle do acelerômetro, para evitar 
     * manter vários canais abertos.
     * @return Retorna a instância dessa classe controladora do acelerômetro.
     */
    public Acelerometro getInstancia() {
        if (!instanciado) {
            instancia = new Acelerometro();
            instanciado = true;
        }
        return instancia;
    }
    
    /**
     * Inicia o recebimento de dados do acelerômetro, abrindo o canal de dados.
     */
    public void inicia() {
        if (aberto)
            return;
        canal = AccelerometerSensor.openRawDataChannel(Application.getApplication());
        aberto = true;
    }
    
    /**
     * Pára de receber dados do acelerômetro. Fecha o canal com o hardware.
     */
    public void para() {
        if (!aberto)
            return;
        canal.close();
        canal = null;
        aberto = false;
    }
    
    /**
     * Lê os dados do acelerômetro.
     * @return Retorna um vetor com as posições XYZ do acelerômetro.
     */
    public short[] le() {
        canal.getLastAccelerationData(xyz);
        return xyz;
    }
}

Bons códigos de acelerômetro à todos.

Abraço.



Sobre o Autor

Este artigo foi escrito por Nelson Pereira Junior.
Nelson é desenvolvedor há 12 anos. Hoje desenvolve aplicações Web e Móveis na Abacomm Brasil cuidando do desenvolvimento server-side J2EE, banco de dados, design de aplicações móveis, e desenvolvimento móvel usando várias plataformas como BlackBerry, J2ME, FlashLite, Android, etc. Para conversar com o autor use o e-mail, MSN e GTalk npereirajr@gmail.com.



Receba artigos em seu e-mail

Receba os novos artigos do blog em seu e-mail. E-Mail:



One Comment

  1. Mobilidade é tudo » Blog Archive » Usando acelerômetro na BlackBerry API:

    […] tarde.. Aí va uma dica: “Como usar a API do Acelerômetro no BlackBerry Storm?” Boa leitura a todos.. Att. […]

Deixe um comentário

blogarama.com Globe of Blogs EatonWeb Blog Directory