×
Namespaces

Variants
Actions

Como recuperar informações de sensores em Java ME

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Exemplo de código
Compatibilidade
Plataforma(s):
Series 40
Symbian

Artigo
Tradução:
Por ivocalado
Última alteração feita por hamishwillee em 08 Aug 2013

Contents

Visão geral

A API de sensores (Mobile Sensor API) (JSR-256) é agora oficialmente suportada em dispositivos S60 5ª edição. O dispositivo N97 será o primeiro dispositivo a vir com esta API nativa no sistema. Além disso, está API pode ser adicionado ao dispositivo Nokia 5800 XpressMusic usando um add-on, que pode ser baixado a partir do Nokia Developer here.

Trabalhando com a API de sensores

Determinando os sensores disponíveis

Vários dispositivos móveis são equipados com diferentes tipos de sensores. A primeira etapa de qualquer aplicação é portanto definir quais sensores estão disponíveis para uso através da API de sensores. O método SensorManager.findSensors() possibilita que aplicações realizem tal tarefa. Este método retorna um array de objetos SersorInfo, que contém as informações sobre os sensores.

O array SernsorInfor pode ser criado como segue:

// Se as variáveis quantity e contextType possuem referências ''null'', informações sobre todos os sensores no dispositivo é retornada
SensorInfo[] infos = SensorManager.findSensors(String quantity, String contextType);

No código abaixo, por exemplo, é apresentado uma maneira de recuperar uma descriação a respeito de cada sensor disponível:

    for (int i = 0; i < length; i ++) {
System.out.println("Sensor #" + (i+1) + ": Description: " + infos[i].getDescription());
}

Exemplo de execução

Nesta seção apresenta-se um simples exemplo para listar todos os sensores e as descrições associadas a cada um deles.

Código fonte: SensorInfoMIDlet.java

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.sensor.SensorInfo;
import javax.microedition.sensor.SensorManager;
import javax.microedition.sensor.MeasurementRange;
import javax.microedition.sensor.ChannelInfo;
 
public class SensorInfoMIDlet extends MIDlet implements CommandListener {
private SensorInfo[] infos;
private MeasurementRange[] ranges;
private Form form;
private Command exitCommand;
 
public SensorInfoMIDlet() {
form = new Form("Sensor Info");
exitCommand = new Command("Exit", Command.EXIT, 1);
form.addCommand(exitCommand);
form.setCommandListener(this);
Display.getDisplay(this).setCurrent(form);
}
 
public void startApp() {
listSensors();
}
 
public void destroyApp(boolean unconditional) {}
 
public void pauseApp() {}
 
/**
* Lista todos os sensores no dispositivo e os seguintes detalhes:<BR>
* - quantidade de sensores<BR>
* - descrição que pode ser lida do sensor<BR>
* - o tipo de contexto do sensor<BR>
* - modelo do sensor<BR>
* - a URL necessária para abrir uma conexão SensorConnection<BR>
* - o tipo de dado do sensor<BR>
* - a escala de medição: valores mais baixo e mais alto e a resolução<BR>
* - informação do canal (channel): os tipos de dados do canal, seus nomes, escalas e unidades<BR>
*/

private void listSensors() {
infos = SensorManager.findSensors(null, null);
if (infos.length==0) return;
int length = infos.length;
int datatypes[] = new int[length];
for (int i = 0; i < length; i ++) {
datatypes[i] = infos[i].getChannelInfos()[0].getDataType();
ranges = infos[i].getChannelInfos()[0].getMeasurementRanges();
addText("Sensor #" + (i+1) + ": Quantity: " + infos[i].getQuantity());
addText("Sensor #" + (i+1) + ": Description: " + infos[i].getDescription());
addText("Sensor #" + (i+1) + ": ContextType: " + infos[i].getContextType());
addText("Sensor #" + (i+1) + ": Model: " + infos[i].getModel());
addText("Sensor #" + (i+1) + ": Url: " + infos[i].getUrl());
String datatype = "";
if (datatypes[i] == 1) datatype = "TYPE_DOUBLE"; //ChannelType.TYPE_DOUBLE = 1
else if (datatypes[i] == 2) datatype = "TYPE_INT"; //ChannelType.TYPE_INT = 2
else if (datatypes[i] == 4) datatype = "TYPE_OBJECT"; //ChannelType.TYPE_OBJECT = 4
addText("Sensor #" + (i+1) + ": DataType: " + datatype);
addText("Sensor #" + (i+1) + ": MeasurementRange, smallest value: " + ranges[0].getSmallestValue());
addText("Sensor #" + (i+1) + ": MeasurementRange, largest value: " + ranges[0].getLargestValue());
addText("Sensor #" + (i+1) + ": MeasurementRange, resolution: " + ranges[0].getResolution());
SensorInfo sensorinfo = infos[i];
ChannelInfo channelInfo[] = sensorinfo.getChannelInfos();
for(int j = 0; j < channelInfo.length; j++) {
ChannelInfo channelinfo = channelInfo[j];
addText("Sensor #" + (i+1) + ": " + (j+1) + ". channel, accuracy:" + channelinfo.getAccuracy());
int d_type = channelinfo.getDataType();
if (d_type == 1) datatype = "TYPE_DOUBLE"; //ChannelType.TYPE_DOUBLE = 1
else if (d_type == 2) datatype = "TYPE_INT"; //ChannelType.TYPE_INT = 2
else if (d_type == 4) datatype = "TYPE_OBJECT"; //ChannelType.TYPE_OBJECT = 4
addText("Sensor #" + (i+1) + ": " + (j+1) + ". channel, data type: " + datatype);
addText("Sensor #" + (i+1) + ": " + (j+1) + ". channel, name: " + channelinfo.getName());
int scale = channelinfo.getScale();
String scaleString = "";
if (scale == 0) scaleString = "scaling not needed";
else scaleString = "" + scale;
addText("Sensor #" + (i+1) + ": " + (j+1) + ". channel, scale: " + scaleString);
addText("Sensor #" + (i+1) + ": " + (j+1) + ". channel, unit: " + channelinfo.getUnit());
}
}
}
 
private void addText(String text) {
form.append(text + "\n");
System.out.println(text);
}
 
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) notifyDestroyed();
}
}

Arquivos jad and jar

O download dos arquivos SensorInfoMIDlet.jad e SensorInfoMIDlet.jar pode ser realizado de SensorInfoMIDlet.zip.

Visualizando a saída

A MIDlet SensorInfoMIDlet imprime as informações geradas para a saída padrão. A aplicação MIDPLogger pode ser usada para visualizara a saída e salva-a em um arquivo de log.

Se a execuação for realizada no N97 - que tem suporte a acelerometro, sensor de bateria, sensor de carregamento e intensidade da rede sem-fio - a saída para um sensor do acelerometro deve ser semelhante a seguir:

Sensor #1: Quantity: acceleration
Sensor #1: Description: acceleration sensor has channels axis_x, axis_y, and axis_z that measure x, y, and z axis accelerations; used, for example, to get the orientation of the device. Always on
Sensor #1: ContextType: user
Sensor #1: Model: Nokia
Sensor #1: Url: sensor:acceleration;contextType=user;model=Nokia;location=NoLoc
Sensor #1: DataType: TYPE_DOUBLE
Sensor #1: MeasurementRange, smallest value: -19.62
Sensor #1: MeasurementRange, largest value: 19.62
Sensor #1: MeasurementRange, resolution: 0.15328125
Sensor #1:, 1. channel, accuracy:0.1
Sensor #1:, 1. channel, data type: TYPE_DOUBLE
Sensor #1:, 1. channel, name: axis_x
Sensor #1:, 1. channel, scale: 0
Sensor #1:, 1. channel, unit: m/s^2
Sensor #1:, 2. channel, accuracy:0.1
Sensor #1:, 2. channel, data type: TYPE_DOUBLE
Sensor #1:, 2. channel, name: axis_y
Sensor #1:, 2. channel, scale: 0
Sensor #1:, 2. channel, unit: m/s^2
Sensor #1:, 3. channel, accuracy:0.1
Sensor #1:, 3. channel, data type: TYPE_DOUBLE
Sensor #1:, 3. channel, name: axis_z
Sensor #1:, 3. channel, scale: 0
Sensor #1:, 3. channel, unit: m/s^2

Ferramentas de desenvolvimento

S60 SDKs

A SDK para o dispositivo N97 possibilita o suporte ao desenvolvimento com a API de sensores. A última versão deste SDK pode ser baixado a partir do Nokia Developer.aqui.

Adcionando suporte ao NetBeans

Aqui são apresentadas as intruções de como adicionar a RI ao Netbeand como uma plataforma:

  • faça o download "RI Binary for JSR-256 Mobile Sensor API 1.0" do site do Nokia Developer aqui.
  • descompacte o pacote para o diretório desejado.
  • no Netbeand, da barra de menus selecione Tools > Java Platforms > Add platforms > Java ME MIDP Platform Emulator > Next. Após a busca, clique Find More Java ME Platform Folders e escolha a pasta onde você descompactou o arquivo baixado.
  • Selecione a plataforma, tais como C:\Users\JSR_256_RI_1_0\Nokia_Prototype_SDK_2_0\devices\Prototype_2_0_S60_MIDP_Emulator, e clique Next.
  • Na opção Detected Platforms dê uma descrição para a plataforma adicionada, se solicitado clique Finish.

Veja também

This page was last modified on 8 August 2013, at 05:17.
76 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×