2. O que é o Adobe AIR?
Cross-Operation System
Runtime HTML JavaScript Flash Flex
Desktop Smartphones Tablet TV
3. Flash Player x AIR
Ambientes RIA
Flash Browser
Instalado
Air
Desktop
Mobile
TV
4. Flash Player Adobe AIR
Conteúdo dentro do Aplicações Móveis
browser
Games,Vídeo API nativa, funcionalidades
extras
Distribuído na Web como Distribuído para um target
um arquivo SWF específico
5. Flash Platform
Desktop
Netbooks
Android
RIM PlayBook
Apple iOS
Google TV
Televisions
WebOS
16. Ambiente de Desenvolvimento
Flash Professional CS5.5
http://www.adobe.com/products/flash.html
Adobe Flash Builder 4.5
http://www.adobe.com/products/flash-builder.html
Android SDK
http://developer.android.com/sdk/
AIR SDK
http://www.adobe.com/products/air/sdk/
17. AIR SDK
AIR Developer Tool (ADT)
Ferramenta de multi-propósito. Cria pacotes apk, apk-emulator ou apk-debug, certificados
auto-assinados, remove, instala e executa o aplicativo no dispositivo.
AIR Debug Launcher (ADL)
Usado para depurar a aplicação durante o desenvolvimento.
AIR Runtime
Usado para executar e testar a aplicação durante o desenvolvimento, antes de instalar a
aplicação no dispositivo.
Frameworks
Inclui todas as core libraries.
50. Eventos do Mouse
MouseEvent
disparados em um click ou toque na tela
51. Eventos de Toque
TouchEvent
disparados quando um ou mais dedos tocam na tela
52. Eventos de Toque
Evento Descrição
TOUCH_BEGIN Inicio de uma ação de toque simples
TOUCH_END Fim de uma ação de toque simples
TOUCH_MOVE Movimento de toque simples
TOUCH_OUT Tocando fora do objeto
TOUCH_OVER Tocando sobre um objeto
TOUCH_ROLL_OVER Passando o dedo sobre o objeto
Ao sair do objeto quando estiver passando o
TOUCH_ROLL_OUT dedo
TOUCH_TAP Toque simples
53. Eventos de Gestos
GestureEvent
disparados quando há uma combinação de eventos de toques que também
suportam coisas como zoom e rotação
54. Eventos de Gestos
Evento Descrição
TransformGestureEvent.GESTURE
Toque com múltiplos dedos, pressionar, arrastar
_PAN
TransformGestureEvent.GESTURE
Rotação com múltiplos dedos
_ROTATE
TransformGestureEvent.GESTURE Arrasto da esquerda para direita, direita para
_SWIPE esquerda, baixo para cima, cima para baixo
TransformGestureEvent.GESTURE
Movimento pinça abrindo ou fechando
_ZOOM
PressAndTapGestureEvent
Pressione com um dedo e toque simples com outro
.GESTURE_PRESS_AND_TAP
GestureEvent.GESTURE_TWO_FI
Toque com dois dedos
NGER_TAP
55. Quantidade máxima de toques
simultâneos suportados pelo
dispositivo
Multitouch.maxTounchPoints
56. Ativando o suporte a toques
e gestos
Multitouch.inputMode = MultitouchInputMode.NONE;
Multitouch.inputMode = MultitouchInputMode. TOUCH_POINT;
Multitouch.inputMode = MultitouchInputMode.GESTURE;
62. Utilizando o Acelerômetro
if (Accelerometer.isSupported)
{
var accel:Accelerometer = new Accelerometer();
accel.setRequestedUpdateInterval(200);
accel.addEventListener(Accelerometer.UPDATE, updateHandler);
}
function updateHandler(e:AccelerometerEvent):void {
e.accelerationX;
e.accelerationY;
e.accelerationZ;
e.timestamp;
}
73. Utilizando a classe CameraUI
if (CameraUI.isSupported)
{
var cam:CameraUI = new CameraUI();
cam.addEventListener(MediaEvent.COMPLETE, completeHandler);
cam.launch(MediaType.IMAGE);
}
function completeHandler(e:MediaEvent):void {
event.data.file.url;
}
75. Armazenamento
File.ApplicationDirectory
Diretório com permissão para somente leitura onde sua aplicação e assets são instalados
File.ApplicationStorageDirectory
Diretório com permissão para leitura e escrita alocado para armazenar informações da sua
aplicação. Deve ser usado para pequenas informações, como preferências da aplicação. Se sua
aplicação for removida os dados são excluídos.
File.userDirectory
Utiliza o armazenamento externo SD. Use-o para armazenar grande quantidade de dados
como imagens, vídeos e arquivos temporários. Crie o diretório com o nome da sua aplicação
para não conflitar com outras aplicações. Não são excluídos quando a aplicação é removida.
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE" />
76. Armazenamento
Local SharedObject
Esta é um simples e conveniente abordagem para armazenar um
pequena quantidade de dados no dispositivo.
Máximo de 100k
Similar ao conceito de cookies do browser
(sem expirar)
77. Local SharedObject
(Escrevendo)
var so:SharedObject = SharedObject.getLocal("MyApp");
so.data.nome = "Eric";
so.data.sobrenome = "Cavalcanti";
so.flush();
78. Local SharedObject
(Lendo)
var so:SharedObject = SharedObject.getLocal("MyApp");
txtNome.text = so.data.nome;
txtSobrenome.text = so.data.sobrenome;
80. Escrevendo Arquivo
var folder:File = File.applicationStorageDirectory.resolvePath
("tecdam");
if (!folder.exists) {
folder.createDirectory();
}
var file:File = folder.resolvePath("hello.txt");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeUTFBytes("Adobe AIR");
fileStream.close();
81. Lendo um Arquivo
var file:File = File.applicationStorageDirectory.resolvePath("tecdam/
hello.txt");
if (!file.exists) {
return;
}
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);
var texto:String = fileStream.readUTFBytes(fileStream.bytesAvailable);
fileStream.close();
trace(texto); // Adobe AIR
82. Excluindo arquivo e
diretório
// Excluindo um arquivo
var file:File = File.applicationStorageDirectory.resolvePath
("tecdam/hello.txt");
if (file.exists) {
file.deleteFile();
}
// Excluindo um diretório
var folder:File = File.applicationStorageDirectory.resolvePath
("tecdam");
folder.deleteDirectory(true);
83. SQLite
Criando o banco de dados
function createDatabase():void {
var file:File = File.applicationStorageDirectory.resolvePath
("myData.db");
if (file.exists) {
trace("I already exist, ready to be used");
} else {
trace("I did not exist, now I am created");
}
}
84. SQLite
Conectando com o banco de dados
var connection:SQLConnection;
connection = new SQLConnection();
try {
connection.open(file);
trace("connection opened");
} catch(error:Error) {
trace(error.message);
}
85. SQLite
Criando uma tabela
var statement:SQLStatement = new SQLStatement();
statement.sqlConnection = connection;
var request:String =
"CREATE TABLE IF NOT EXISTS geography ("
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, country TEXT, city
TEXT )";
statement.text = request;
try {
statement.execute();
} catch(error:Error) {
trace(error.message);
}
86. SQLite
Adicionando, editando ou removendo dados
var statement:SQLStatement = new SQLStatement();
statement.sqlConnection = connection;
var insert:String =
"INSERT INTO geography (country, city) VALUES ('France',
'Paris')";
statement.text = insert;
try {
statement.execute();
} catch(error:Error) {
trace(error.message);
}
88. SQLite
Realizando consultas
var statement:SQLStatement = new SQLStatement();
statement.sqlConnection = connection;
statement.text = "SELECT * FROM geography";
//statement.addEventListener(SQLEvent.RESULT, selectionReceived);
statement.execute();
var result:SQLResult = statement.getResult();
if (result != null) {
var rows:int = result.data.length;
for (var i:int = 0; i < rows; i++) {
var row:Object = result.data[i];
trace(row.id + "" + row.country + "" + row.city);
}
}
89. SQLite
Embedding a database
var embedded:File = File.applicationDirectory.resolvePath
("embeddedDB.db");
if (embedded.exists) {
trace("database was embedded");
var local:File = File.applicationStorageDirectory.resolvePath
("myDatabase.db");
if (!local.exists) {
embedded.copyTo(local);
}
} else {
trace("database was not embedded");
}
90. Mão na massa!
Criar uma aplicação de cadastro de contatos
1. Cadastro, Exclusão e Navegação
1.1. Nome
1.2. E-mail
1.3. Telefone
1.4. Endereço
2. Funções
2.1. Realizar ligação
2.2. Enviar SMS
2.3. Enviar e-mail
2.4. Exibir Endereço no Google Maps
99. Navegando entre as Views
ViewNavigator
- adiciona uma nova view
pushView()
- vai para a view anterior
popView()
- vai para a primeira view
popToFirstView()
- remove todas as views da
popAll()
pilha
101. Passando dados para
uma View
pushView(viewClass:Class,
data:Object = null,
context:Object = null,
transition:ViewTransitionBase = null):void
viewClass especifica o nome da classe de view que será exibida.
data especifica quaisquer dados passados para a view.
context especifica um objeto arbitrário que estará disponível na propriedade
ViewNavigator.context na próxima View.
transition especifica a transição que deve ser usada na mudança para nova view.
104. Retornando dados para
uma View
override public function createReturnObject():Object
{
return txtValor.text;
}
protected function button1_clickHandler(event:MouseEvent):void
{
navigator.popView();
}
105. Acessando os dados enviados pelo
popView com
createReturnObject
ViewNavigator.poppedViewReturnedObject.object