quinta-feira, 24 de março de 2011

Como detectar browsers e plataformas usadas pelo cliente em EXTJS

Embora Ext JS seja uma biblioteca cross-browser, existem casos em que seu aplicativo precisa ter um comportamento diferente, dependendo do navegador do usuário ou plataforma. A detecção do browser e da plataforma são tarefas muito simples, com Ext JS.

Você pode detectar vários navegadores e plataformas utilizadas por seus clientes da seguinte forma:

  • Você pode usar Ext.isChrome para descobrir se o navegador detectado é o Chrome :
var browser = "";
if (Ext.isChrome) {
browser = "Hi! I'm the new kid on the block";
}
  • Os navegadores como o Mozilla Firefox e que usam o motor de renderização Gecko são detectados com Ext.isGecko, Ext.isGecko2 e Ext.isGecko3:

if (Ext.isGecko) {
browser = "Gecko";
}
if (Ext.isGecko2) {
browser = "Gecko2";
}
if (Ext.isGecko3) {
browser = "We like Firefox!";
}
  • Internet Explorer
if (Ext.isIE) {
browser = "IE";
}
if (Ext.isIE6) {
browser = "Get a decent browser, now!";
}
if (Ext.isIE7) {
browser = "IE7";
}
if (Ext.isIE8) {
browser = "IE8";
}
  • Opera
if (Ext.isOpera) {
browser = "Opera";
}
  • Safari
if (Ext.isSafari) {
browser = "Safari";
}
if (Ext.isSafari2) {
browser = "Safari2";
}
if (Ext.isSafari3) {
browser = "Safari3";
}
if (Ext.isSafari4) {
browser = "Safari4";
}
  • Plataforma Adobe Air
var platform = "";
if (Ext.isAir) {
platform = "Air";
}
  • Linux
if (Ext.isLinux) {
platform = "Linux";
}
  • Mac OS
if (Ext.isMac) {
platform = "Mac";
}
  • Windows
if (Ext.isWindows) {
platform = "Windows ";
}

Leandro Santos

terça-feira, 22 de março de 2011

Introdução ao desenvolvimento para Android - Ativando Componentes

Os content providers são ativados quando se tornam alvos de uma requisição de um ContentResolver. Os outros três componentes —atividades , serviços, e broadcast receivers — são ativados por mensagens assíncronas chamadas intentos. Um intento é um objeto Intent que carrega o conteúdo da mensagem. Para atividades e serviços, ele indica a ação solicitada e especifica a URI dos dados sobre os quais atuar, dentre outras coisas. Por exemplo, ele pode transmitir um pedido para uma atividade para mostrar uma imagem ao usuário ou permitir que o usuário edite algum texto. Para broadcast receivers, o objeto Intent indica a ação anunciada. Por exemplo, ele pode anunciar às partes interessadas que o botão da câmera foi pressionado.

Existem métodos distintos para ativar cada tipo de componente:
  • Uma atividade é lançada (ou recebe alguma coisa pra fazer) passando-se um objeto Intent para Context.startActivity() (inicia uma atividade da qual não se espera retorno) ou Activity.startActivityForResult()(usado quando se espera um resultado de volta da atividade que ela está iniciando). Uma atividade frequentemente inicia uma próxima. A atividade responsável pode analizar o intento inicial que a fez ser lançada chamando seu método getIntent().   O Android chama o método onNewIntent() da atividade para passar quaisquer intentos subsequentes.
O método startActivityForResult() é usado por exemplo, para iniciar uma atividade que permite ao usuário selecionar uma foto, ela deve espera que seja retornada a foto escolhida. O resultado é retornado em um objeto Intent que é passado para o método onActivityResult() da atividade requerente.
  • Um serviço é iniciado (ou novas instruções são dadas para o serviço em execução) passando-se um objeto Intent para Context.startService(). O Android chama o método onStart() do serviço passando-lhe o objeto Intent.
Da mesma forma, um intento pode ser passado para Context.bindService() para estabelecer uma conexão em execução entre o componente requerente e o serviço-alvo. O serviço recebe o objeto Intent através de uma chamada a onBind(). (Se o serviço não estiver rodando, bindService() pode opcionalmente iniciá-lo.) Por exemplo, uma atividade poderia estabelecer uma conexão com o serviço de playback de música mencionado anteriormente de forma a permitir que o usuário controlasse (através de uma interface de usuário) o playback. A atividade chamaria bindService() para preparar a conexão, e então chamaria métodos definidos pelo serviço para afetar o playback.
A seção Remote procedure calls, fornece mais detalhes sobre ligação (binding) a um serviço.
Para saber mais sobre intent messages, veja o artigo à parte, Intents and Intent Filters.

adaptado de http://zendroid.com.br/documentacao/principios-basicos-da-aplicacao-–-parte-2-intentos/
Leandro Santos

sábado, 19 de março de 2011

Conceitos do desenvolvimento para Android - Parte II

Serviços
Um serviço roda em background por um período de tempo indeterminado, este não possui uma interface visual . O exemplo de um serviço é tocar uma música de playback enquanto o usuário faz outras coisas, ou pode buscar informações na rede ou calcular alguma coisa e devolver o resultado para as atividades que precisam daquilo. Cada serviço herda da classe base Service.

Para manter a música tocando, a atividade do media player poderia iniciar um serviço para executar em background. O sistema então manteria o serviço com a música de playback rodando mesmo depois que a atividade que o iniciou deixasse a tela.

É possível conectar-se (bind) a um serviço em execução (e iniciar o serviço caso ele não esteja rodando). Enquanto conectado, você pode se comunicar com o serviço através de uma interface de que ele disponha. Para o serviço de música, essa interface poderia permitir ao usuário pausar, retroceder, parar e recomeçar a música.

Assim como as atividades e os outros componentes, os serviços rodam na thread principal do processo da aplicação. Para que eles não bloqueiem outros componentes da interface do usuário, geralmente eles criam uma outra thread para tarefas demoradas (como tocar uma música). Veja Processes and Threads, depois.

Broadcast receivers


Um broadcast receiver é um componente que não faz nada além de receber e reagir a broadcasts. Muitos broadcasts se originam no core do sistema — por exemplo, mensagens de que o timezone mudou, que a bateria está fraca, que uma foto foi tirada, ou que o usuário modificou a preferência de idioma. As aplicações também podem iniciar broadcasts — por exemplo, para avisar a outras aplicações que alguns dados foram baixados para o dispositivo e estão disponíveis para uso.

Uma aplicação pode ter vários broadcast receivers para responder a mensagens que ela considera importantes. Todos os receivers herdam da classe base BroadcastReceiver.

Os broadcast receivers não exibem uma interface de usuário. Entretanto, eles podem iniciar uma activity em resposta à informação que receberam, ou podem usar o NotificationManager para alertar o usuário. Notificações podem chamar a atenção do usuário de várias formas — piscando a luz de fundo, vibrando o dispositivo, tocando um som, e assim por diante. Elas normalmente inserem um ícone persistente na barra de status, a qual os usuários podem abrir para pegar a mensagem.

Content providers

Um content provider torna um determinado conjunto dos dados da aplicação disponível para outras aplicações. Os dados podem ser armazenados no sistema de arquivos, em uma base de dados SQLite, ou de qualquer outra maneira que faça sentido. O content provider herda da classe base ContentProvider para implementar um conjunto padrão de métodos que habilitam outras aplicações a recuperar e armazenar dados do tipo que ele controla. Entretanto, as aplicações não podem chamar estes métodos diretamente. Ao invés disso, elas utilizam um objeto ContentResolver e chamam seus métodos. Um ContentResolver pode conversar com qualquer content provider; ele coopera com o provider para gerenciar qualquer comunicação envolvida entre os processos.
Veja o documento à parte Content Providers para maiores informações sobre o uso de content providers.

Sempre que há uma requisição que deveria ser manipulada por um componente em particular, o Android se certifica de que o processo da aplicação esteja em execução, iniciando-o caso necessário, e que uma instância apropriada do componente esteja disponível, criando a instância se for preciso.


fonte: http://zendroid.com.br/documentacao/principios-basicos-da-aplicacao-parte-1-componentes/

Leandro Santos

quinta-feira, 17 de março de 2011

Conceitos do desenvolvimento para Android - Parte I

Componentes da Aplicação

Uma aplicação Android pode utilizar elementos de outras aplicações (desde que estas o permitam). Um exemplo, seria uma aplicação que precisa utilizar um scroller, e este objeto foi desenvolvido para outra aplicação e se esta liberar outras aplicações poderão utilizar este objeto. Sua aplicação não incorpora o código da outra aplicação e nem linka para ele. Em vez disso, ela simplesmente inicia aquele pedaço do outro aplicativo quando surge a necessidade. Para que isso funcione, o sistema deve ser capaz de iniciar um processo de aplicação quando qualquer parte dele se fizer necessária, e instanciar os objetos Java daquela parte.

Existem quatro tipos de componentes:

Atividades

Uma atividade (activity) apresenta uma interface visual (user interface, UI) para o usuário para uma determinada operação que esse usuário possa utilizar. Quando um usuário seleciona um aplicativo da tela inicial ou de um ativador de aplicativo, uma atividade é iniciada. Por exemplo, uma atividade pode apresentar uma lista de itens de menu onde os usuários podem fazer escolhas, ou ela pode exibir fotografias juntamente com suas legendas. Embora  uma aplicação possua várias atividades e estas trabalhem juntas para formar uma interface coesa, cada atividade é independente das outras. Cada uma é implementada como uma subclasse da classe base Activity.

Cada atividade recebe uma janela padrão para desenhar. O conteúdo visual da janela é provido por uma hierarquia de views — objetos derivados da classe base View. Cada view controla um espaço retangular individual dentro da janela. Views-mães englobam e organizam o layout de suas filhas. Leaf views (aquelas mais abaixo na hierarquia) desenham nos retângulos que elas controlam e respondem a ações diretas do usuário naquele espaço. Assim, as views são onde ocorre a interação da atividade com o usuário. Por exemplo, uma view pode exibir uma pequena imagem e iniciar uma ação quando o usuário toca nesta imagem. O Android possui diversas views prontas que você pode usar — incluindo botões, campos de texto, barras de rolagem, itens de menu, checkboxes, e mais.

Uma hierarquia de views é colocada dentro da janela de uma atividade pelo método Activity.setContentView(). O content view é o objeto View na raíz da hierarquia.

segunda-feira, 14 de março de 2011

Novo NDK para Android torna possível desenvolvimento de jogos 3D com OpenGL

O NDK (Native Development Kit, ou kit de desenvolvimento nativo) do Android recebeu uma atualização que pode deixar usuários do iPhone com alguma inveja. O novo kit vem com suporte a desenvolvimento utilizando gráficos OpenGL ES. Isso permite que desenvolvedores criem jogos tão bons ou até melhores do que os disponíveis para o iPhone ou Palm Pre, que já têm essa biblioteca gráfica disponível há algum tempo.
Além disso o novo NDK apresenta uma nova nomenclatura de versões para diminuir a confusão entre desenvolvedores que achavam que a versão 1.6 do kit só serviria para a versão 1.6 do Android. E pra que não exista confusão, o SDK é liberado em versões diferentes do NDK, que permite que programadores criem aplicativos com código nativo em C ou C++ e precisa ser usada em conjunto com o SDK do Android.
A má notícia é que apenas versões 2.0 ou superiores do Android poderão rodar os jogos desenvolvidos com OpenGL, devido ao requerimento de um processador mais rápido. Nessa categoria estão os celulares Nexus One e o Motorola Droid, que aqui no Brasil é chamado de Milestone. Programadores que não fizerem uso de OpenGL nos seus aplicativos poderão rodar os programas desenvolvidos com esse novo NDK nas versões 1.5 ou superiores do sistema operacional móvel.

Fonte: http://tecnoblog.net/17232/nova-ndk-para-android-torna-possivel-desenvolvimento-de-jogos-3d-com-opengl/

Leandro Santos

sexta-feira, 4 de março de 2011

JQuery ou ExtJS

Ext JS
      Prós:
            - Projeto muito ativo
            - Contém grande fóruns de suporte (com muitas respostas para as perguntas mais comuns) e tem uma boa equipe de suporte ativa.
            - A melhor coleção de elementos de interface do usuário. Estes vêm com um "pixel-prefected '
estilos e são utilizáveis fora da caixa. Ideal se você estiver indo para escrever um Painel de Controle de adim .
            - tem uma das maiores comunidades
            - boa documentação e exemplos
            - Boa qualidade do código / legibilidade

      Contras
            - Licença não é livre para uso comercial
            - Suporte com taxas adicional
            - Um monte de código JS tem de ser carregado. Algo em torno de 300-400Kb JS descompactado. A maioria dos sites ExtJS eu vi exibir um carregamento ". . . " logo antes da interface do usuário começar a funcionar.
            - Não há solução de relatórios bom de erros. Você passa horas de depuração de código ExtJS tentando descobrir o que você fez de errado. Podendo resolver este problema usando o firebug do firefox.


JQuery

      Prós: 

           - Licença OpenSource
           - É muito leve
           - Tem comunidade muito grande
           - É muito popular
           - É ideal se você pretende adicionar algum AJAX / JS ajustes para uma interface existente
           - Tem muita história de um velho
            - Boa documentados
            - Fácil de aprender

      Contras:

            - A maioria das funcionalidades vem em plug-ins de apoio de diversas comunidade, que não são tão estáveis como você gostaria que fosse e, geralmente, não fornecem qualquer tipo de apoio
          - Falta complexos elementos da interface como o ExtJS
          - A maioria dos plug-ins que você vai usar vai exigir alguns ajustes de sua parte. Eles geralmente não são flexíveis o suficiente para as necessidades de cada suíte.

 

Leandro Santos