Mostrando postagens com marcador XMLVM. Mostrar todas as postagens
Mostrando postagens com marcador XMLVM. Mostrar todas as postagens

segunda-feira, 11 de abril de 2011

Android: Dicas 2

Olá povo,

Estar à frente de uma sala de aula me propicia o benefício da "ensinagem" (ensino + apredizagem) onde ao mesmo tempo em que ensino, aprendo bastante com meu alunos. Esse post foi totalmente formado por dúvidas dos meu alunos do TECDAM, e que foram resolvidos por eles próprios. Bom para todos, que aprendemos juntos.

Dica 1 (crédito para Gustavo - olha ele aí - Coutinho)
O Android tem um sistema de i18n (internacionalização) muito bacana, onde basta prover recursos através de notações pré-definidas pelo próprio Android em pastas do projeto. Inclusive falei disso nesse post. Os recursos são selecionados automaticamente de acordo com configurações do aparelho. Mas, e se eu quiser determinar o idioma da aplicação? Segue abaixo o código que força um idioma para nossa aplicação.


String languageToLoad = "es"; // espanhol
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
Resources res = getBaseContext().getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
setContentView(R.layout.main);


Dica 2 (crédito para Rogério Casal, aluno do Unibratec)
Nesse post, mostrei como limitar os caracteres utilizando expressões regulares. Porém, podemos fazer a mesma coisa utilizando a propriedade digits do componente EditText, basta colocar os caracteres que você quer permitir.

Dica 3 (crédito para Augusta "Nariquinha")
É comum colocarmos os identificadores dos componentes adicionados nos arquivos de layout utilizando @+id/idDoComponente. Entretanto, quando ficamos com muitas telas ou quando começamos a importar layouts pode haver uma confusão ou até um conflito com esses identificadores. Uma abordagem legal, seria substituir o "id" por algo mais inteligível como "cadpessoa". Por exemplo a definição do EditText abaixo seria perfeitamente válida:
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+cadpessoa/edtNome"/>

E no código Java, poderíamos acessar esse id usando:
EditText edt = 
(EditText)findViewById(R.cadpessoa.edtNome);


Dica 4 (crédito para Leonardo Santos)
Essa eu não arrumei uma justificativa plausível. Quando fui executar um arquivo MP3 no emulador o código abaixo funcionou perfeitamente.
MediaPlayer player = new MediaPlayer();
player.setDataSource("file:///mnt/sdcard/musica.mp3");
player.prepare();
player.start();

Porém, quando coloquei no telefone não funcionou. O erro "Playing Audio - error: PVMFErrNotSupported (Prepare failed.: status=0x1)" era exibido. Após uma busca rápida no Google, a solução foi simples. Ao invés de passar a String diretamente, é passado um objeto FileDescriptor obtido através de um FileInputStream como abaixo.
MediaPlayer player = new MediaPlayer();
FileInputStream fis =
new FileInputStream("/sdcard/musica.mp3");
player.setDataSource(fis.getFD());
player.prepare();
player.start();

Como disse acima, não sei o porquê do erro.

Dica 5 (crédito para Pedro CC)
Para gerar a chave para utilizar a API do Google Maps no Android é preciso usar a ferramenta keytool que vem no JDK (Java Development Kit). Porém, um problema que acontecia constantemente quando ia gerar essa chave era a mensagem "erro de keytool: java.lang.IllegalArgumentException: unknown format type at". Ou seja, erro sem explicação... Esse problema ocorre aparentemente por conta das configurações regionais. Quando elas estão em português, esse erro acontece, em inglês não.
No Windows, vá até o Painel de Controle, e em Configurações Regionais altere o formato das informações para inglês. No Mac vá até System Preferences, em seguida selecione Language e Text, na aba Formats selecione Inglês. [Editado com o comment de Eric Braga] No Linux, basta setar a variável de ambiente LC_ALL usando (export LC_ALL="en_US").

Dica 6 (crédito para Ricardo Gilson)
Se quiser fazer com que cada atributo de cada tag de um arquivo XML fique em uma linha separada no Eclipse, acesse o menu
Windows>Preferences>XML>XML Files>Editor e marque a opção "Split multiple attributes each on a new line". Depois é só abrir seus arquivos de Layout e pressionar Ctrl+Shift+F para que o arquivo fique bem mais agradável.

Agradeço a todos pelas dicas e se dei os créditos errado ou faltou alguém é só avisar :)

4br4ç05,
nglauber

sexta-feira, 19 de novembro de 2010

Android ou iPhone? Que tal os dois?

Olá povo,

Na próxima quarta-feira 24/11 estarei defendendo minha dissertação de mestrado. Meu tema trata de como fazer com que uma aplicação iPhone execute na plataforma Android. Para isso, desenvolvi uma ferramenta chamada iOS2Droid, que converte o código fonte escrito em Objective-C (linguagem do iPhone) para Java (usado no Android). Essa ferramenta se torna muito útil principalmente para empresas de desenvolvimento que já criam aplicações para iPhone e querem converter as mesmas para a plataforma do Google.

Então uma das seções que apresentarei na minha defesa, são os concorrentes do iOS2Droid, que vou listar pra vocês abaixo:


XMLVM (http://www.xmlvm.org) é um trabalho realizado por Arno Puder que realiza a conversão de arquivos de linguagem intermediária (como os .class do Java) para um arquivo XML, que por sua vez pode ser convertido para outra linguagem.
Um dos recursos do XMLVM é a possibilidade de converter aplicações Android para iPhone. Exatamente o oposto do que é proposto pelo iOS2Droid. Um detalhe é que a aplicação desenvolvida em Android, utiliza o framework do iPhone escrito em Java.

Dessa forma, um diferencial do iOS2Droid é que a aplicação desenvolvida em iPhone utiliza o framework nativo, e a ferramenta faz as adaptações para converte-la em uma aplicação Android.


O PhoneGap (http://www.phonegap.com/) é um framework de desenvolvimento open source para construir aplicações mobile cross-platform. As aplicações são construídas utilizando HTML e JavaScript e permite que uma aplicação possa executar em diversas plataformas além de Android e iPhone, como Palm, Symbian e Blackberry.


O Titanium Mobile (http://www.appcelerator.com/products/titanium-mobile-application-development/) faz trabalho similar ao PhoneGap. O desenvolvedor cria as aplicações utilizando HTML/JavaScript/CSS e a mesma poderá ser executada em telefones Android ou no iPhone.
A ferramenta tem uma versão gratuita com funcionalidade reduzida e uma paga (com todas as funcionalidades obviamente).

Um ponto positivo do iOS2Droid em relação a essas duas ferramentas, é que o desenvolvedor não tem que aprender um novo framework de desenvolvimento.


Com o Adobe Air (http://www.adobe.com/br/products/air/) os desenvolvedores podem criar aplicações com o Flash CS5 para dispositivos móveis como: iPhone, Android e BlackBerry. Assim como outras ferramentas já citadas, pode-se utilizar HTML+CSS+JavaScript, porém o desenvolvedor pode contar também com a linguagem ActionScprit.


Para finalizar, temos o Elips Studio (http://www.openplug.com/products/elips-studio) que é um SDK baseado no Adobe Flex, onde o desenvolvedor cria suas aplicações usando ActionScript e MXML, e as aplicações serão disponibilizadas para Android e iPhone através de uma engine que converte esse código em uma aplicação nativa.

Podemos notar que todos os concorrentes apresentados aqui se baseiam em novas aplicações. E todas aquelas aplicações disponíveis na AppStore? O iOS2Droid pensou nelas! A ferramenta converte um código existente em uma aplicação Android. E os desenvolvedores de aplicações para iPhone poderão continuar utilzando o seu bom e velho Xcode. Podendo agora, ver suas aplicações executando em dispositivos Android com pouquíssimo trabalho.

Espero que a banca goste do trabalho. E vocês o que acham da idéia? Quem quiser dar uma conferida na dissertação é só clicar aqui.

4br4ç05,
nglauber