Desenvolvendo aplicaçõesAdobe AIR para Android                       Eric Cavalcanti               ecavalcanti@gmail.com  ...
O que é o Adobe AIR?  Cross-Operation System  Runtime HTML JavaScript Flash Flex  Desktop Smartphones Tablet TV
Flash Player x AIRAmbientes RIA   Flash        Browser                Instalado   Air                Desktop              ...
Flash Player                Adobe AIR   Conteúdo dentro do          Aplicações Móveis        browser     Games,Vídeo      ...
Flash Platform    Desktop    Netbooks    Android    RIM PlayBook    Apple iOS    Google TV    Televisions    WebOS
Conceitos chavesOperações assíncronasMono-ThreadBaseado em vetorOOPHTTP, XML, JSON, WebService, AMF...
Vetor x Bitmap
Adobe AIR para dispositivos         móveis     Aplicações nativas     Android APK Packages        iOS IPA packages   Black...
AIR para AndroidAndroid 2.2 (Froyo) ou superiorRuntime baixado automaticamenteAdobe Flash Professional CS5.5Adobe Flash Bu...
Recursos•   Camera and microphone•   Accelerometer•   GPS•   StageWebView•   Multitouch and gestures•   Screen orientation...
AIR para iOS  iOS 3    Air SDK 2.0 iOS 4 +   Air SDK 2.6
E se o Adobe AIR não  estiver instalado?
Compilação  .fla              ActionScript      .swf.as files       Compiler      ActionScript                              ...
Packaging            apkadt            ipa
Execuçãoapkapkipaipa
Ambiente de DesenvolvimentoFlash Professional CS5.5http://www.adobe.com/products/flash.htmlAdobe Flash Builder 4.5http://ww...
AIR SDKAIR Developer Tool (ADT)Ferramenta de multi-propósito. Cria pacotes apk, apk-emulator ou apk-debug, certificadosauto...
Listando os dispositivos> adb devicesList of devices attachedHT06CP910453	 device
Criando um dispositivo virtualAndroid
Instalando o Adobe Air      no Emulador> adb install Runtime.apk
Instalando o Adobe Air           no Dispositivo> adb install Runtime.apk
Configurando o  dispositivo
ActionScript 3
Declarando variáveisvar nome : String;var valor : Number;var cliente : Cliente;
forfor (var i:int = 0; i < 5; i++){    trace(i);}
for each..invar myArray:Array = ["one", "two", "three"];for each (var item in myArray){      trace(item);}//   output://  ...
whilevar i:int = 0;while (i < 5){    trace(i);    i++;}
do..whilevar i:int = 5;do{    trace(i);    i++;} while (i < 5);
Classespackage org.firescrum{    public class Product {        public var name:String;        public var description:Strin...
Métodospublic function soma(num1:int, num2:int):int{    var resultado:int = num1 + num2;    return resultado;}
Métodospublic function log(mensagem:String):void{    trace("Log: " + mensagem);}
Castvar quantityField:String = "3";var quantity:int = int(quantityField);
EventosmyObject.addEventListener(Event, eventListenerFunction);myButton.addEventListener(MouseEvent.CLICK,myClickReaction)...
Tipos de Projetos AdobeAIR para dispositivos móveis          Tipo                 Ferramentas                          Fla...
Flash Professional CS5.5
Flash CS5.5 Air para Android                          .apk
Adobe Flex Framework
Flex Slider
Flex Slider
Flex HeroFlash Builder Burrito
Flash Builder 4.5
Flex Mobile ProjectUm ActionScript Mobile Project também é um        tipo especial de projeto AIR
Auto Orientação<initialWindow> <autoOrients>true</autoOrients></initialWindow>stage.align = StageAlign.TOP_LEFT;stage.scal...
Hello World comActionScript Mobile      Project
Flex Mobile ProjectUm Flex Mobile Project é um tipo especial de               projeto AIR
Flex Mobile Project
Hello World com Flex   Mobile Project
Compilação             ActionScript      .swf                            ActionScript              Compiler       Bytecode...
Toques e Gestos
Eventos do Mouse          MouseEventdisparados em um click ou toque na tela
Eventos de Toque               TouchEventdisparados quando um ou mais dedos tocam na tela
Eventos de ToqueEvento              DescriçãoTOUCH_BEGIN         Inicio de uma ação de toque simplesTOUCH_END           Fi...
Eventos de Gestos                     GestureEventdisparados quando há uma combinação de eventos de toques que também     ...
Eventos de GestosEvento                          DescriçãoTransformGestureEvent.GESTURE                                Toq...
Quantidade máxima de toquessimultâneos suportados pelo         dispositivo   Multitouch.maxTounchPoints
Ativando o suporte a toques         e gestos     Multitouch.inputMode = MultitouchInputMode.NONE; Multitouch.inputMode = M...
Manipulando toques Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; sprite.addEventListener(TouchEvent.TOUCH_BEGIN,...
Gestos suportadovar gestures:Vector.<string> = Multitouch.supportedGestures;
Manipulando gestos Multitouch.inputMode = MultitouchInputMode.GESTURE; sprite.addEventListener(TransformGestureEvent.GESTU...
Demo
Acelerômetro
Utilizando o Acelerômetro if (Accelerometer.isSupported) {      var accel:Accelerometer = new Accelerometer();      accel....
Demo
Realizando chamadasvar request:URLRequest = new URLRequest(“tel:812-555-1212”);navigateToURL(request);
Abrindo o browservar request:URLRequest = new URLRequest(“http://www.google.com.br”);navigateToURL(request);
Enviando SMSvar request:URLRequest = new URLRequest(“sms:812-555-1212”);navigateToURL(request);
Enviando E-mailvar request:URLRequest = new URLRequest(“mailto:myEmailAdress@gmail.com?subject=GeneratedMail&body=SomeText...
Demo
Geolocalização
Utilizando a Geolocalização if (Geolocation.isSupported) {       var geo:Geolocation = new Geolocation();       geo.addEve...
Demo
Câmera
Utilizando a classe CameraUI if (CameraUI.isSupported) {       var cam:CameraUI = new CameraUI();       cam.addEventListen...
Demo
ArmazenamentoFile.ApplicationDirectoryDiretório com permissão para somente leitura onde sua aplicação e assets são instala...
ArmazenamentoLocal SharedObjectEsta é um simples e conveniente abordagem para armazenar umpequena quantidade de dados no d...
Local SharedObject                 (Escrevendo)var so:SharedObject = SharedObject.getLocal("MyApp");so.data.nome = "Eric";...
Local SharedObject                     (Lendo)var so:SharedObject = SharedObject.getLocal("MyApp");txtNome.text = so.data....
Demo
Escrevendo Arquivovar folder:File = File.applicationStorageDirectory.resolvePath("tecdam");if (!folder.exists) {  folder.c...
Lendo um Arquivovar file:File = File.applicationStorageDirectory.resolvePath("tecdam/hello.txt");if (!file.exists) {  retu...
Excluindo arquivo e              diretório// Excluindo um arquivovar file:File = File.applicationStorageDirectory.resolveP...
SQLiteCriando o banco de dadosfunction createDatabase():void {  var file:File = File.applicationStorageDirectory.resolvePa...
SQLiteConectando com o banco de dadosvar connection:SQLConnection;connection = new SQLConnection();try {  connection.open(...
SQLiteCriando uma tabelavar statement:SQLStatement = new SQLStatement();statement.sqlConnection = connection;var request:S...
SQLiteAdicionando, editando ou removendo dadosvar statement:SQLStatement = new SQLStatement();statement.sqlConnection = co...
SQLiteUtilizando parâmetrosvar insert:String = "INSERT INTO geography (country, city)VALUES (?, ?)";statement.text = inser...
SQLiteRealizando consultasvar statement:SQLStatement = new SQLStatement();statement.sqlConnection = connection;statement.t...
SQLiteEmbedding a databasevar embedded:File = File.applicationDirectory.resolvePath("embeddedDB.db");if (embedded.exists) ...
Mão na massa!Criar uma aplicação de cadastro de contatos1. Cadastro, Exclusão e Navegação 1.1. Nome 1.2. E-mail 1.3. Telef...
Views e navegação
LayoutA. ActionBar control B. Content Area
LayoutA. ActionBar control B. Content Area C. TabBar control
ActionBarFornece fácil acesso a funcionalidades importantes               Não pode ter scrollPode ser definido globalmente ...
Ocultando o ActionBar  View.actionBarVisible = false
Arquitetura simples de uma         aplicação
Exemplo<?xml version="1.0" encoding="utf-8"?><s:ViewNavigatorApplication  xmlns:fx="http://ns.adobe.com/mxml/2009"  xmlns:...
Navegação
Navegando entre as Views                   ViewNavigator                           - adiciona uma nova viewpushView()     ...
Navegando entre as Views      ViewNavigator
Passando dados para                 uma ViewpushView(viewClass:Class, data:Object = null, context:Object = null, transitio...
Acessando os dados enviados pelo        pushView         View.data
Exemplo<?xml version="1.0" encoding="utf-8"?><s:View xmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.c...
Retornando dados para          uma Viewoverride public function createReturnObject():Object{   return txtValor.text;}prote...
Acessando os dados enviados pelo         popView com     createReturnObjectViewNavigator.poppedViewReturnedObject.object
Exemplo<?xml version="1.0" encoding="utf-8"?><s:View xmlns:fx="http://ns.adobe.com/mxml/2009"         xmlns:s="library://n...
Arquitetura de uma aplicação   com múltiplas seções
Exemplo<?xml version="1.0" encoding="utf-8"?><s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xm...
Splash Screen<?xml version="1.0" encoding="utf-8"?><s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"   ...
Menus
Menus<s:viewMenuItems>   <s:ViewMenuItem   label="Add" click="itemClickInfo(event);"/>   <s:ViewMenuItem   label="Cancel" ...
View State
Portrait e Landscape<s:states>    <s:State name="portrait"/>    <s:State name="landscape"/></s:states>
Data Binding    {...}
Item Renderers
MXML ItemRendererActionScript ItemRenderer
IconItemRenderer   A. iconField B. decorator
Demo
Charts
Obrigado!             Eric Cavalcanti     ecavalcanti@gmail.com                   @ericoc
Upcoming SlideShare
Loading in...5
×

Desenvolvendo aplicações Adobe AIR para Android

8,602

Published on

Slides antigos do meu curso de Desenvolvendo aplicações Adobe AIR para Android

Published in: Technology
2 Comments
8 Likes
Statistics
Notes
No Downloads
Views
Total Views
8,602
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
2
Likes
8
Embeds 0
No embeds

No notes for slide

Transcript of "Desenvolvendo aplicações Adobe AIR para Android"

  1. 1. Desenvolvendo aplicaçõesAdobe AIR para Android Eric Cavalcanti ecavalcanti@gmail.com @ericoc
  2. 2. O que é o Adobe AIR? Cross-Operation System Runtime HTML JavaScript Flash Flex Desktop Smartphones Tablet TV
  3. 3. Flash Player x AIRAmbientes RIA Flash Browser Instalado Air Desktop Mobile TV
  4. 4. Flash Player Adobe AIR Conteúdo dentro do Aplicações Móveis browser Games,Vídeo API nativa, funcionalidades extrasDistribuído na Web como Distribuído para um target um arquivo SWF específico
  5. 5. Flash Platform Desktop Netbooks Android RIM PlayBook Apple iOS Google TV Televisions WebOS
  6. 6. Conceitos chavesOperações assíncronasMono-ThreadBaseado em vetorOOPHTTP, XML, JSON, WebService, AMF...
  7. 7. Vetor x Bitmap
  8. 8. Adobe AIR para dispositivos móveis Aplicações nativas Android APK Packages iOS IPA packages BlackBerry Playbook (beta)
  9. 9. AIR para AndroidAndroid 2.2 (Froyo) ou superiorRuntime baixado automaticamenteAdobe Flash Professional CS5.5Adobe Flash Builder 4.5
  10. 10. Recursos• Camera and microphone• Accelerometer• GPS• StageWebView• Multitouch and gestures• Screen orientation / full-screen• Phone/SMS/e-mail/browser/Android Market integration• Session cache support restore app state• Hardware buttons• Local databases SQLite
  11. 11. AIR para iOS iOS 3 Air SDK 2.0 iOS 4 + Air SDK 2.6
  12. 12. E se o Adobe AIR não estiver instalado?
  13. 13. Compilação .fla ActionScript .swf.as files Compiler ActionScript BytecodeProject Files
  14. 14. Packaging apkadt ipa
  15. 15. Execuçãoapkapkipaipa
  16. 16. Ambiente de DesenvolvimentoFlash Professional CS5.5http://www.adobe.com/products/flash.htmlAdobe Flash Builder 4.5http://www.adobe.com/products/flash-builder.htmlAndroid SDKhttp://developer.android.com/sdk/AIR SDKhttp://www.adobe.com/products/air/sdk/
  17. 17. AIR SDKAIR Developer Tool (ADT)Ferramenta de multi-propósito. Cria pacotes apk, apk-emulator ou apk-debug, certificadosauto-assinados, remove, instala e executa o aplicativo no dispositivo.AIR Debug Launcher (ADL)Usado para depurar a aplicação durante o desenvolvimento.AIR RuntimeUsado para executar e testar a aplicação durante o desenvolvimento, antes de instalar aaplicação no dispositivo.FrameworksInclui todas as core libraries.
  18. 18. Listando os dispositivos> adb devicesList of devices attachedHT06CP910453 device
  19. 19. Criando um dispositivo virtualAndroid
  20. 20. Instalando o Adobe Air no Emulador> adb install Runtime.apk
  21. 21. Instalando o Adobe Air no Dispositivo> adb install Runtime.apk
  22. 22. Configurando o dispositivo
  23. 23. ActionScript 3
  24. 24. Declarando variáveisvar nome : String;var valor : Number;var cliente : Cliente;
  25. 25. forfor (var i:int = 0; i < 5; i++){ trace(i);}
  26. 26. for each..invar myArray:Array = ["one", "two", "three"];for each (var item in myArray){ trace(item);}// output:// one// two// three
  27. 27. whilevar i:int = 0;while (i < 5){ trace(i); i++;}
  28. 28. do..whilevar i:int = 5;do{ trace(i); i++;} while (i < 5);
  29. 29. Classespackage org.firescrum{ public class Product { public var name:String; public var description:String; public var creationDate:Date; }}
  30. 30. Métodospublic function soma(num1:int, num2:int):int{ var resultado:int = num1 + num2; return resultado;}
  31. 31. Métodospublic function log(mensagem:String):void{ trace("Log: " + mensagem);}
  32. 32. Castvar quantityField:String = "3";var quantity:int = int(quantityField);
  33. 33. EventosmyObject.addEventListener(Event, eventListenerFunction);myButton.addEventListener(MouseEvent.CLICK,myClickReaction);function myClickReaction (e:MouseEvent):void{ trace("I was clicked!");}
  34. 34. Tipos de Projetos AdobeAIR para dispositivos móveis Tipo Ferramentas Flash Professional, Flash ActionScript Project Builder, FlashDevelop Flex Project Flash Builder
  35. 35. Flash Professional CS5.5
  36. 36. Flash CS5.5 Air para Android .apk
  37. 37. Adobe Flex Framework
  38. 38. Flex Slider
  39. 39. Flex Slider
  40. 40. Flex HeroFlash Builder Burrito
  41. 41. Flash Builder 4.5
  42. 42. Flex Mobile ProjectUm ActionScript Mobile Project também é um tipo especial de projeto AIR
  43. 43. Auto Orientação<initialWindow> <autoOrients>true</autoOrients></initialWindow>stage.align = StageAlign.TOP_LEFT;stage.scaleMode = StageScaleMode.NO_SCALE;
  44. 44. Hello World comActionScript Mobile Project
  45. 45. Flex Mobile ProjectUm Flex Mobile Project é um tipo especial de projeto AIR
  46. 46. Flex Mobile Project
  47. 47. Hello World com Flex Mobile Project
  48. 48. Compilação ActionScript .swf ActionScript Compiler BytecodeProject Files
  49. 49. Toques e Gestos
  50. 50. Eventos do Mouse MouseEventdisparados em um click ou toque na tela
  51. 51. Eventos de Toque TouchEventdisparados quando um ou mais dedos tocam na tela
  52. 52. Eventos de ToqueEvento DescriçãoTOUCH_BEGIN Inicio de uma ação de toque simplesTOUCH_END Fim de uma ação de toque simplesTOUCH_MOVE Movimento de toque simplesTOUCH_OUT Tocando fora do objetoTOUCH_OVER Tocando sobre um objetoTOUCH_ROLL_OVER Passando o dedo sobre o objeto Ao sair do objeto quando estiver passando oTOUCH_ROLL_OUT dedoTOUCH_TAP Toque simples
  53. 53. Eventos de Gestos GestureEventdisparados quando há uma combinação de eventos de toques que também suportam coisas como zoom e rotação
  54. 54. Eventos de GestosEvento DescriçãoTransformGestureEvent.GESTURE Toque com múltiplos dedos, pressionar, arrastar_PANTransformGestureEvent.GESTURE Rotação com múltiplos dedos_ROTATETransformGestureEvent.GESTURE Arrasto da esquerda para direita, direita para_SWIPE esquerda, baixo para cima, cima para baixoTransformGestureEvent.GESTURE Movimento pinça abrindo ou fechando_ZOOMPressAndTapGestureEvent Pressione com um dedo e toque simples com outro.GESTURE_PRESS_AND_TAPGestureEvent.GESTURE_TWO_FI Toque com dois dedosNGER_TAP
  55. 55. Quantidade máxima de toquessimultâneos suportados pelo dispositivo Multitouch.maxTounchPoints
  56. 56. Ativando o suporte a toques e gestos Multitouch.inputMode = MultitouchInputMode.NONE; Multitouch.inputMode = MultitouchInputMode. TOUCH_POINT; Multitouch.inputMode = MultitouchInputMode.GESTURE;
  57. 57. Manipulando toques Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; sprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); function onTouchBegin(event:TouchEvent) { trace("touch begin" + event.touchPointID); } function onTouchMove(event:TouchEvent) { trace("touch move" + event.touchPointID); } function onTouchEnd(event:TouchEvent) { trace("touch end" + event.touchPointID); }
  58. 58. Gestos suportadovar gestures:Vector.<string> = Multitouch.supportedGestures;
  59. 59. Manipulando gestos Multitouch.inputMode = MultitouchInputMode.GESTURE; sprite.addEventListener(TransformGestureEvent.GESTURE_ZOOM, zoomHandler); sprite.addEventListener(TransformGestureEvent.GESTURE_PAN, panHandler); private function zoomHandler(event:TransformGestureEvent):void { var sprite:Sprite = event.target as Sprite; sprite.scaleX *= event.scaleX; sprite.scaleY *= event.scaleY; } private function panHandler(event:TransformGestureEvent):void { var sprite:Sprite = event.target as Sprite; sprite.x += event.offsetX; sprite.y += event.offsetY; }
  60. 60. Demo
  61. 61. Acelerômetro
  62. 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; }
  63. 63. Demo
  64. 64. Realizando chamadasvar request:URLRequest = new URLRequest(“tel:812-555-1212”);navigateToURL(request);
  65. 65. Abrindo o browservar request:URLRequest = new URLRequest(“http://www.google.com.br”);navigateToURL(request);
  66. 66. Enviando SMSvar request:URLRequest = new URLRequest(“sms:812-555-1212”);navigateToURL(request);
  67. 67. Enviando E-mailvar request:URLRequest = new URLRequest(“mailto:myEmailAdress@gmail.com?subject=GeneratedMail&body=SomeText”);navigateToURL(request);
  68. 68. Demo
  69. 69. Geolocalização
  70. 70. Utilizando a Geolocalização if (Geolocation.isSupported) { var geo:Geolocation = new Geolocation(); geo.addEventListener(GeolocationEvent.UPDATE, updateHandler); geo.setRequestedUpdateInverval(1000); } function updateHandler(e:GeolocationEvent):void { e.latitude; e.longitude; e.altitude; e.horizontalAccuracy; e.verticalAccuracy; e.speed; e.heading; e.timestamp; }
  71. 71. Demo
  72. 72. Câmera
  73. 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; }
  74. 74. Demo
  75. 75. ArmazenamentoFile.ApplicationDirectoryDiretório com permissão para somente leitura onde sua aplicação e assets são instaladosFile.ApplicationStorageDirectoryDiretório com permissão para leitura e escrita alocado para armazenar informações da suaaplicação. Deve ser usado para pequenas informações, como preferências da aplicação. Se suaaplicação for removida os dados são excluídos.File.userDirectoryUtiliza o armazenamento externo SD. Use-o para armazenar grande quantidade de dadoscomo imagens, vídeos e arquivos temporários. Crie o diretório com o nome da sua aplicaçãopara 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. 76. ArmazenamentoLocal SharedObjectEsta é um simples e conveniente abordagem para armazenar umpequena quantidade de dados no dispositivo. Máximo de 100k Similar ao conceito de cookies do browser (sem expirar)
  77. 77. Local SharedObject (Escrevendo)var so:SharedObject = SharedObject.getLocal("MyApp");so.data.nome = "Eric";so.data.sobrenome = "Cavalcanti";so.flush();
  78. 78. Local SharedObject (Lendo)var so:SharedObject = SharedObject.getLocal("MyApp");txtNome.text = so.data.nome;txtSobrenome.text = so.data.sobrenome;
  79. 79. Demo
  80. 80. Escrevendo Arquivovar 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. 81. Lendo um Arquivovar 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. 82. Excluindo arquivo e diretório// Excluindo um arquivovar file:File = File.applicationStorageDirectory.resolvePath("tecdam/hello.txt");if (file.exists) { file.deleteFile();}// Excluindo um diretóriovar folder:File = File.applicationStorageDirectory.resolvePath("tecdam");folder.deleteDirectory(true);
  83. 83. SQLiteCriando o banco de dadosfunction 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. 84. SQLiteConectando com o banco de dadosvar connection:SQLConnection;connection = new SQLConnection();try { connection.open(file); trace("connection opened");} catch(error:Error) { trace(error.message);}
  85. 85. SQLiteCriando uma tabelavar 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. 86. SQLiteAdicionando, editando ou removendo dadosvar 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);}
  87. 87. SQLiteUtilizando parâmetrosvar insert:String = "INSERT INTO geography (country, city)VALUES (?, ?)";statement.text = insert;statement.parameters[0] = object.country;statement.parameters[1] = object.city;var insert:String = "INSERT INTO geography (country, city)VALUES (:co, :ci)";statement.text = insert;statement.parameters[":co"] = object.country;statement.parameters[":ci"] = object.city;
  88. 88. SQLiteRealizando consultasvar 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. 89. SQLiteEmbedding a databasevar 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. 90. Mão na massa!Criar uma aplicação de cadastro de contatos1. Cadastro, Exclusão e Navegação 1.1. Nome 1.2. E-mail 1.3. Telefone 1.4. Endereço2. Funções 2.1. Realizar ligação 2.2. Enviar SMS 2.3. Enviar e-mail 2.4. Exibir Endereço no Google Maps
  91. 91. Views e navegação
  92. 92. LayoutA. ActionBar control B. Content Area
  93. 93. LayoutA. ActionBar control B. Content Area C. TabBar control
  94. 94. ActionBarFornece fácil acesso a funcionalidades importantes Não pode ter scrollPode ser definido globalmente ou para cada View
  95. 95. Ocultando o ActionBar View.actionBarVisible = false
  96. 96. Arquitetura simples de uma aplicação
  97. 97. Exemplo<?xml version="1.0" encoding="utf-8"?><s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" firstView="views.HomeView"></s:ViewNavigatorApplication>
  98. 98. Navegação
  99. 99. Navegando entre as Views ViewNavigator - adiciona uma nova viewpushView() - vai para a view anteriorpopView() - vai para a primeira viewpopToFirstView() - remove todas as views dapopAll() pilha
  100. 100. Navegando entre as Views ViewNavigator
  101. 101. Passando dados para uma ViewpushView(viewClass:Class, data:Object = null, context:Object = null, transition:ViewTransitionBase = null):voidviewClass 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 propriedadeViewNavigator.context na próxima View.transition especifica a transição que deve ser usada na mudança para nova view.
  102. 102. Acessando os dados enviados pelo pushView View.data
  103. 103. Exemplo<?xml version="1.0" encoding="utf-8"?><s:View xmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"title="Employee View"> <s:layout> <s:VerticalLayout paddingTop="10"/> </s:layout> <s:VGroup> <s:Label text="{data.firstName}"/> <s:Label text="{data.lastName}"/> <s:Label text="{data.companyID}"/> </s:VGroup></s:View>
  104. 104. Retornando dados para uma Viewoverride public function createReturnObject():Object{ return txtValor.text;}protected function button1_clickHandler(event:MouseEvent):void{ navigator.popView();}
  105. 105. Acessando os dados enviados pelo popView com createReturnObjectViewNavigator.poppedViewReturnedObject.object
  106. 106. Exemplo<?xml version="1.0" encoding="utf-8"?><s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView" add="viewAddHandler(event)"> <fx:Script> <![CDATA[ protected function viewAddHandler(event:FlexEvent):void { if (navigator.poppedViewReturnedObject) { lblValor.text = navigator.poppedViewReturnedObject.object.toString(); } } ]]> </fx:Script>...
  107. 107. Arquitetura de uma aplicação com múltiplas seções
  108. 108. Exemplo<?xml version="1.0" encoding="utf-8"?><s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"> <s:ViewNavigator label="Employees" width="100%" height="100%" firstView="views.EmployeeMainView"/> <s:ViewNavigator label="Contacts" width="100%" height="100%" firstView="views.ContactsMainView"/> <s:ViewNavigator label="Search" width="100%" height="100%" firstView="views.SearchView"/></s:TabbedViewNavigatorApplication>
  109. 109. Splash Screen<?xml version="1.0" encoding="utf-8"?><s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" firstView="views.Bairros" splashScreenImage="@Embed(source=assets/splash.png)" splashScreenScaleMode="none" splashScreenMinimumDisplayTime="2000">
  110. 110. Menus
  111. 111. Menus<s:viewMenuItems> <s:ViewMenuItem label="Add" click="itemClickInfo(event);"/> <s:ViewMenuItem label="Cancel" click="itemClickInfo(event);"/> <s:ViewMenuItem label="Delete" click="itemClickInfo(event);"/> <s:ViewMenuItem label="Edit" click="itemClickInfo(event);"/> <s:ViewMenuItem label="Search" click="itemClickInfo(event);"/></s:viewMenuItems>
  112. 112. View State
  113. 113. Portrait e Landscape<s:states> <s:State name="portrait"/> <s:State name="landscape"/></s:states>
  114. 114. Data Binding {...}
  115. 115. Item Renderers
  116. 116. MXML ItemRendererActionScript ItemRenderer
  117. 117. IconItemRenderer A. iconField B. decorator
  118. 118. Demo
  119. 119. Charts
  120. 120. Obrigado! Eric Cavalcanti ecavalcanti@gmail.com @ericoc

×