Instalando Aplicativos no Emulador do Android

| No comment yet
Bom, pessoal, abaixo está um simples tutorial de como instalar aplicações no Emulador Android.

Primeiramente vamos inserir a pasta tools nas variavies de ambiente do computador


No meu caso a pasta estava em C:\Program Files\android-sdk\tools\

Feito isso, vamos para o segundo passo.

Execute o Emulador, pois só é possível instalar uma aplicação com o mesmo rodando.
Se o emulador não estiver rodando ocorrerá o erro "Device not Found" na hora da instalação.


Faça o download da aplicação que você quer instalar. As aplicações Android tem a extensão .apk

Agora abra o Prompt de Comando

Vá até a pasta platform-tools
Comandos DOS Usados:

cd "Nome da Pasta"   (Entra na Pasta)
cd/              (Volta ao Diretorio Raiz)
cd..             (Volta para a pasta Anterior)
dir               (Lista todos os diretorios)

Agora é só digitar adb install "E o caminho da sua aplicação";
Eu instalei o BarcodeScanner versão 3.72 (Leitor de Código de Barras)


Irá aparecer uma mensagem dá instalação


Pronto!!! A aplicação está devidamente instalada no emulador.




Valeu, pessoal!! Até a próxima.

Reiniciar Aplicação em AIR

| No comment yet

Bom pessoal hoje vou mostrar como reiniciar a aplicação em AIR.

Primeiro passo, vc deve ir no xml do projeto (nomedoprojeto.xml) e setar a a tag allowBrowserInvocation como true.
Conforme exemplo abaixo.

<allowbrowserinvocation>true</allowbrowserinvocation>

1:  <?xml version="1.0" encoding="utf-8"?>  
2:  <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"  
3:              xmlns:mx="library://ns.adobe.com/flex/mx"  
4:              xmlns:s="library://ns.adobe.com/flex/spark">  
5:    <fx:Declarations>  
6:      <!-- Place non-visual elements (e.g., services, value objects) here -->  
7:    </fx:Declarations>  
8:    <fx:Script>  
9:      <![CDATA[  
10:        import adobe.utils.ProductManager;  
11:        import mx.core.FlexGlobals;  
12:        import mx.core.WindowedApplication;  
13:        private function rebootApplication():void {  
14:          var app:WindowedApplication = FlexGlobals.topLevelApplication as WindowedApplication;  
15:          var mgr:ProductManager = new ProductManager("airappinstaller");  
16:          mgr.launch("-launch "+app.nativeApplication.applicationID+" "+app.nativeApplication.publisherID);  
17:          app.close();  
18:        }  
19:      ]]>  
20:    </fx:Script>  
21:    <mx:VBox width="100%"  
22:         height="100%"  
23:         horizontalAlign="center"  
24:         verticalAlign="middle">  
25:      <s:Button label="Reiniciar Aplicação"  
26:           click="rebootApplication()"/>  
27:    </mx:VBox>  
28:  </s:WindowedApplication>  


Com relação ao ProductManager

Se vc der  um Ctrl + Espaço, ele não vai aparecer, ela é uma Classe Oculta.
É só colar o import abaixo.


  import adobe.utils.ProductManager;


Obs: Só irá funcionar quando você der o Release Build na aplicação e instalar na maquina. Debbugar não funciona.


AIR e Java usando Remote Object

| No comment yet
Deixei um exemplo abaixo mostrando como é fácil, configurar o AIR para usar remote object.


1:  <?xml version="1.0" encoding="utf-8"?>  
2:  <s:WindowedApplication initialize="init()"  
3:              xmlns:fx="http://ns.adobe.com/mxml/2009"  
4:              xmlns:mx="library://ns.adobe.com/flex/mx"  
5:              xmlns:s="library://ns.adobe.com/flex/spark">  
6:    <fx:Declarations>  
7:    </fx:Declarations>  
8:    <fx:Script>  
9:      <![CDATA[  
10:        import mx.collections.ArrayCollection;  
11:        import mx.controls.Alert;  
12:        import mx.messaging.Channel;  
13:        import mx.messaging.ChannelSet;  
14:        import mx.messaging.channels.AMFChannel;  
15:        import mx.rpc.events.FaultEvent;  
16:        import mx.rpc.events.ResultEvent;  
17:        import mx.rpc.remoting.RemoteObject;  
18:        private var ro:RemoteObject = new RemoteObject();  
19:        [Bindable]  
20:        private var allDados:ArrayCollection = new ArrayCollection();  
21:  //               Funçao de inicialização, seta o canal do AMF  
22:        private function init():void {  
23:          var cs:ChannelSet = new ChannelSet();  
24:          var customChannel:Channel = new AMFChannel("my-amf", "http://localhost:8080/projetoTeste/messagebroker/amf");  
25:          cs.addChannel(customChannel);  
26:          ro.channelSet = cs;  
27:  //                    Desetination setado  
28:          ro.destination = "TesteService";  
29:  //                    Listeners para a funçao de Busca  
30:          ro.findAllTestes.addEventListener(ResultEvent.RESULT, resultHandler);  
31:          ro.findAllTestes.addEventListener(FaultEvent.FAULT, faultHandler);  
32:        }  
33:        private function resultHandler(evt:ResultEvent):void {  
34:          allDados = new ArrayCollection();  
35:          allDados = evt.result as ArrayCollection;  
36:        }  
37:        private function faultHandler(evt:FaultEvent):void {  
38:          Alert.show(evt.fault.faultDetail, "Error");  
39:        }  
40:        private function findAllTestes():void {  
41:          ro.findAllTestes();  
42:        }  
43:      ]]>  
44:    </fx:Script>  
45:    <mx:VBox width="100%"  
46:         height="100%"  
47:         horizontalAlign="center"  
48:         verticalAlign="middle">  
49:      <mx:AdvancedDataGrid width="100%"  
50:                 height="100%"  
51:                 dataProvider="{allDados}">  
52:        <mx:columns>  
53:          <mx:AdvancedDataGridColumn width="120"  
54:                        dataField="assunto"  
55:                        headerText="Assunto"/>  
56:          <mx:AdvancedDataGridColumn width="120"  
57:                        dataField="status"  
58:                        headerText="Status"/>  
59:          <mx:AdvancedDataGridColumn width="120"  
60:                        dataField="OID"  
61:                        headerText="OID"/>  
62:          <mx:AdvancedDataGridColumn width="120"  
63:                        dataField="codigo_prioridade"  
64:                        headerText="Cod. Prioridade"/>  
65:        </mx:columns>  
66:      </mx:AdvancedDataGrid>  
67:      <mx:ApplicationControlBar width="100%"  
68:                   bottom="0">  
69:        <mx:Button label="Buscar"  
70:              click="findAllTestes()"/>  
71:      </mx:ApplicationControlBar>  
72:    </mx:VBox>  
73:  </s:WindowedApplication>  


Minimizar aplicativo AIR com Icone na Bandeja (System Tray)

| No comment yet
Bom pessoal, vou ensinar a todos como usar a funcionalidade System Tray do Air.



Com a mesma você  pode minimizar o aplicativo e deixa - lo na bandeja para que possa ser utilizado novamente.

1:  <?xml version="1.0" encoding="utf-8"?>  
2:  <s:WindowedApplication close="windowedapplication1_closeHandler(event)"  
3:              closing="windowedapplication1_closingHandler(event)"  
4:              creationComplete="windowedapplication1_creationCompleteHandler(event)"  
5:              xmlns:fx="http://ns.adobe.com/mxml/2009"  
6:              xmlns:mx="library://ns.adobe.com/flex/mx"  
7:              xmlns:s="library://ns.adobe.com/flex/spark">  
8:    <fx:Script>  
9:      <![CDATA[  
10:        import mx.core.BitmapAsset;  
11:        import mx.events.FlexEvent;  
12:        private var dockImage:BitmapAsset;  
13:        [Bindable]  
14:        [Embed(source="./assets/icons/suport16x16.png")]  
15:        public var mySysTray:Class;  
16:        protected function windowedapplication1_closingHandler(event:Event):void {  
17:          event.preventDefault();  
18:          NativeApplication.nativeApplication.icon.bitmaps = [];  
19:          this.minimize();  
20:          this.interceptMinimize();  
21:        }  
22:        private function initSysTray():void {  
23:          dockImage = new mySysTray() as BitmapAsset;  
24:          //  Validação simples  
25:          if (NativeApplication.supportsSystemTrayIcon) {  
26:            //Listeners  
27:            SystemTrayIcon(NativeApplication.nativeApplication.icon).tooltip = "Chamados Desktop";  
28:            SystemTrayIcon(NativeApplication.nativeApplication.icon).addEventListener(MouseEvent.CLICK, undock);  
29:          }  
30:        }  
31:        private function undock(e:Event):void {  
32:    //Função que ouve quando o usuario clica no icone da barra lateral  
33:          NativeApplication.nativeApplication.icon.bitmaps = [];  
34:          this.visible = true;  
35:          this.includeInLayout = true;  
36:          this.maximize();  
37:        }  
38:        private function interceptMinimize():void {  
39:  //        Seta icone na barra lateral e deixa a aplicação invisivel  
40:          NativeApplication.nativeApplication.icon.bitmaps = [dockImage];  
41:          this.visible = false;  
42:          this.includeInLayout = false;  
43:        }  
44:        protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void {  
45:          //Chamo uma função que prepara o sistema para a funcionalidade System Tray  
46:          initSysTray();  
47:        }  
48:        protected function windowedapplication1_closeHandler(event:Event):void {  
49:          // TODO Auto-generated method stub  
50:        }  
51:      ]]>  
52:    </fx:Script>  
53:    <fx:Declarations>  
54:      <!-- Place non-visual elements (e.g., services, value objects) here -->  
55:    </fx:Declarations>  
56:  </s:WindowedApplication>  

Bem, esse é um exemplo simples de como usar o System Tray, flw galera.

Jogos em ActionScript

| No comment yet
Uma dica pra quem tem interesse em programar para jogos. O site abaixo tem varios tutoriais e exemplos de jogos feitos em action script.
Estou baixando o Adobe Flash Professional aqui para começar a programar.
São tutoriais bem simples e explicativos em inglês.

http://www.flashgametuts.com/


Aproveitem!!!!.

SQLITE, Use-o.

| No comment yet
Bom pessoal. Hoje vou falar um pouco sobre sqlite. Sqlite é uma biblioteca em C que implementa um banco de dados SQL embutido. É indicado para aplicações desktop de pequeno porte, sites e aplicações mobile.
É uma boa opção pra quem tem interesse em aprender sobre banco de dados pois não há dificuldade em sua configuração. Apesar de suportar até 2 terabytes de informação, ele tem suas limitações. Não é indicado para aplicações de médio e grande porte. Também não é indicado para aplicações de muitos acessos simultâneos. Se o uso do banco de dados for apenas para Selects simultâneos não há problema, mas se for para alterações no banco como Inserts e Updates vocês terá problemas. O Sqlite tem um lock que trava a database quando estiver fazendo alguma alteração e se houver a tentativa de fazer outra alteração o lock irá disparar para a aplicação uma mensagem SQLITE_BUSY. O programa que uso para gerenciamento das databases, é o SQLITE Expert Personal, é muito simples de usar. Está disponível o link para download do programa na pagina de downloads do blog. Eu uso a versão Personal que atende muito bem minhas necessidades, porém também está disponível a verão Professional. Fiz algumas aplicações usando o sqlite e indico a todos