Usando Acelerômetro no Flash Lite com Nokia Platform Services

Acelerômetro é um sensor de movimento, sendo um dispositivo responsável por medir as posições relativas nos eixos x, y e z, ou seja, calcular a aceleração do objeto. Hoje em dia é usado para as mais variadas utilidades como por exemplo: air bags, medição de vibrações, medições de inclinação, smartphones, video games etc.

O Acelerômetro é usado hoje em dia é usado para as mais variadas utilidades como por exemplo: air bags, medição de vibrações, medições de inclinação, smartphones, video games etc.

O Flash Player 10.1(só para mobile) e o Flash Lite 4.0 possuem acesso ao acelerômetro do dispositivo. Estou ancioso para colocar as mãos em um Nokia N8 para testar as novas funcionalidades do Flash Lite 4.0, mas esta dificil. Enquanto isso, vamos desenvolvendo com Flash Lite 3.0 e 3.1.
A Nokia criou uma biblioteca especialmente para trabalhar em conjunto com o Flash Lite dando acesso a recurso que nativamente não são possivéis como acesso ao acelerômetro, GPS, agenda de contatos etc.

A Nokia criou uma biblioteca especialmente para trabalhar em conjunto com o Flash Lite dando acesso a recurso que nativamente não são possivéis como acesso ao acelerômetro, GPS, agenda de contatos etc.

Vou mostrar um exemplo simples do uso do acelerômetro com Flash Lite 3.0 e Nokia Platform Services.
Baixe a biblioteca da Nokia e em seguida salve no diretorio de acordo com seu sistema operacional:

O Nokia Platform Services só funciona em dispositivos com o Symbian S60 5th.

  • No Mac – Copie para /Users//Library/Application/Support/Adobe/Flash CS5/en/Configuration/Classes/
  • No Windows Vista – Extraia para /Users//AppData/Local/Adobe/Flash CS4/en/Configuration/Classes.
  • No Windows XP – Extraia para //Local Settings/Application Data/Adobe/Flash CS5/en/Configuration/Classes/

Começaremos nosso primeiro exemplo:

  • Crie um arquivo do tipo ActionScript 2.0 e peça para compilar para o Flash Lite 3.0 ou 3.1. Ou pode criar diretamente pelo Adobe Device Central CS5.
  • Crie um simbolo do tipo MovieClip e dê o nome de instância de “ball_mc”.
  • Crie três campos de textos do tipo dinâmicos, neles serão mostradas as posições x, y e z.
  • Devemos ter o stage parecido com isto:

    Stage para testar Acelerômetro

Feito isto, vamos a parte de programação agora:
Começaremos configurando o stage para não modificar o tamanho do aplicativo caso a janela sejá redimensionada. O “DisableKeypadCompatibilityMode” serve para usar em smartphones com telas touchscreen, se não for usado, o smartphone automaticamente adicionar as teclas virtuais referente a um smartphone não-touchscreen.
[ACTIONSCRIPT]
Stage.scaleMode = “noScale”;
Stage.align = “LT”;

fscommand2(“DisableKeypadCompatibilityMode”);
fscommand2(“FullScreen”, “true”);
[/ACTIONSCRIPT]
Agora vamos importar as classes feitas pela Nokia e utilizar a classe Device e desabilitar a autorotação do aplicativo.
[ACTIONSCRIPT]
import com.nokia.lib.Service;
import com.nokia.lib.Device;

var deviceObject:Object = new Device();
deviceObject.DisableAutoRotation(true);
[/ACTIONSCRIPT]
Utilizaremos a classe Service passando o paramentro Sensor e em seguida passando como criterio de busca as coordenadas do acelerômetro.
[ACTIONSCRIPT]
var sensors = new Service(“Service.Sensor”, “ISensor”);
var inParam = {SearchCriterion:”AccelerometerAxis”};
var outParams = sensors.FindSensorChannel(inParam);
[/ACTIONSCRIPT]
Será retornado uma serie de valores que usaremos para “avisar” o smartphone que nosso aplicativo será atualizado a cada mudança de valor das coordenadas do acelerômetro através de um método callback.
[ACTIONSCRIPT]
var channelInfo = outParams.ReturnValue;
var channelId = channelInfo[0].ChannelId;
var contextType = channelInfo[0].ContextType;
var quantity = channelInfo[0].Quantity;
var channelType = channelInfo[0].ChannelType;
var location = channelInfo[0].Location;
var vendorId = channelInfo[0].VendorId;
var dataItemSize = channelInfo[0].DataItemSize;
var channelDataTypeId = channelInfo[0].ChannelDataTypeId;
var channelParams = {ChannelId:channelId, ContextType:contextType, Quantity:quantity, ChannelType:channelType, Location:location, VendorId:vendorId, DataItemSize:dataItemSize, ChannelDataTypeId:channelDataTypeId};

var inParams = {ListeningType:”ChannelData”, ChannelInfoMap:channelParams};
sensors.RegisterForNotification(inParams, callBack);
function callBack(transactionID:String, eventID:String, outParam:Object)
{
if (outParam.ErrorCode == 0)
{
var channelData = outParam.ReturnValue;
txtX.text = channelData.XAxisData;
txtY.text = channelData.YAxisData;
txtZ.text = channelData.ZAxisData;

xSpeed -= channelData.XAxisData/NOISE;
ySpeed += channelData.YAxisData/NOISE;
}
}
[/ACTIONSCRIPT]
Depois basta atualizar as coordenadas x e y com os valores xSpeed e ySpeed em nosso MovieClip. Disponibilizei no fonte um código para delimitar até onde o MovieClip pode andar, ou seja, somente na area do nosso aplicativo.
DOWNLOAD SOURCE

Para saber mais:
http://www.forum.nokia.com/Develop/Other_Technologies/Flash_lite/
http://library.forum.nokia.com/index.jsp?topic=/Flash_Lite_Developers_Library/GUID-46EABDC1-37CB-412A-ACAD-1A1A9466BB68.html

Se você esta procurando um livre sobre Flash Lite, recomendo Flash Lite 2: Crie Aplicativos e Games para Celulares do meu amigo Fabricio Manzi, creio que seja o único em português que temos 😉

Leave a Reply