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

quarta-feira, 22 de maio de 2013

Android: Dicas 9

Olá povo,

Segue mais um post da série "Dicas de Android". Aproveitem!

Dica 1 - Driver ADB universal para Windows

Essa dica foi dada pelo Pedro Borba, meu aluno da Unibratec. Muitas vezes quando conectamos alguns devices menos populares e eles não são reconhecidos pelo Windows, e às vezes é até complicado achar esses drivers na internet. O site abaixo disponibiliza uma versão do driver ADB, que funciona em muitos desses aparelhos. Vale a pena conferir.

http://adbdriver.com/

Dica 2 - Imagem de background repetida
Como nas velhas páginas HTML, às vezes é interessante colocar uma imagem de background repetida lado a lado, dando a impressão que é uma imagem maior. A solução é criar um arquivo XML (meu_bg.xml por exemplo) na pasta drawable com o seguinte conteúdo.
<bitmap 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:src="@drawable/minha_imagem_que_repete"
  android:tileMode="repeat" />
Depois é só colocar @drawable/meu_bg como sua imagem de background.

Dica 3 - Vários núcleos do processador para o Emulador
Essa dica foi dada por Daniel Sant'Ana, meu aluno do TECDAM. Quando executamos o emulador,  apenas 1 núcleo do processador da máquina é ativado. Para permitir que o emulador utilize os outros núcleos do processador, abra o gerenciador de tarefas do windows, clique em processos, e encontre o processo referente ao emulador. Em seguida, clique com o botão direito nele, e escolha a opção afinidade, então marque todos os núcleos. Se quiser, você ainda pode definir a prioridade do processo do emulador como alta. Feito isso, é possível ganhar um pouco de desempenho no emulador.

Outra opção, em fase experimental, pode ser vista aqui, na seção "Configuring Virtual Machine Acceleration". Ou aqui, no post escrito pelo meu colega Eric Cavalcanti.

Dica 4 - HttpURLConnection ou HTTPClient
A maioria das aplicações Android utiliza HTTP para enviar e receber dados. O Android tem duas APIs para essa tarefa: HTTPClient da Apache e HttpURLConnection do próprio Java.
Conforme podemos ver aqui e aqui, o pessoal da Google está recomendando utilizar o HttpURLConnection para aplicações voltadas para Android 2.3 ou superior. Nas versões 2.2 e inferiores, essa API tinha uma série de bugs que foram corrigidos a partir da versão seguinte. Além disso, alguns recursos como compressão e cache.

Dica 5 - DumbleDroid e WebCachedImageView
Meu amigo Leocádio Tiné, um dos caras que mais conhece de Android que eu conheço, acabou de disponibilizar para a comunidade essas duas bibliotecas interessantíssimas. A primeira faz o download de arquivos XML e JSON e autoMAGICAmente cria as classes Java que representam essas estruturas.
Perguntei ao Leocádio qual a diferença entre essa biblioteca e a GSON (da Google) e o Simple XML. E a resposta foi:

"A diferença básica do Dumbledroid pra essas 2 libraries é que o Dumbledroid faz caching automático em memória e em disco, e roda código específico pra Android. Por exemplo: ele usa as classes de JSON incluídas no Android SDK, e não as do Java SDK, como o GSON. As diferenças específicas: GSON: Usando GSON, você tem que carregar o JSON manualmente. Usando Dumbledroid, basta passar a URL que ele faz o carregamento, parsing e caching. É mais simples. SimpleXML: Usando SimpleXML, além de ter que carregar o XML manualmente, você tem que escrever annotations nas classes pra mapear os campos aos nós do XML. No Dumbledroid, isso não é preciso."

Além disso o DumbleDroid já tem um plugin para Eclipse que facilita ainda mais o seu uso.
Já o WebCachedImageView é bem similar ao ImageView nativo, com o benefício de passarmos apenas a URL da imagem que desejamos e ainda fazer o cache da mesma.

Segue os links para download das libs:
https://github.com/leocadiotine/Dumbledroid
https://github.com/leocadiotine/WebCachedImageView

Vou tentar fazer um post só pra essas duas libs em breve.

Dica 6 - Detectando JavaScript da WebView na Activity
Um recurso que pode trazer grandes possibilidades é conseguirmos capturar funções Java Script que são executadas dentro de uma WebView. Criem o arquivo meu.html dentro da pasta assets do projeto e deixe-o conforme abaixo.
<html>
<header>
<script type="text/javascript">
function showAndroidToast(s, t) {
  window.nglauber.showToast(s, t);
} 
</script>
</header>
<body>
  <H1>Formulario em HTML</h1>
  <form name="meuForm">
    Nome: 
    <input type="text" name="txtNome"/><br>
    Idade: 
    <input type="text" name="txtIdade"/><br>
    <input type="button" 
      onclick="showAndroidToast(txtNome.value, txtIdade.value);" 
      value="Enviar">
  </form>
</body>
</html>
É possível interceptar a função showAndroidToast e chamar o método showToast dentro da nossa Activity. Dessa forma, quando o usuário pressionar o botão do HTML, o código da Activity será executado.
public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  
    WebView wv = (WebView)findViewById(R.id.webView1);
    WebSettings settings = wv.getSettings();
    settings.setJavaScriptEnabled(true);
    wv.addJavascriptInterface(this, "nglauber");
    wv.loadUrl("file:///android_asset/meu.html");
  }

  @JavascriptInterface
  public void showToast(String s, String t) {
    Toast.makeText(this, 
      "Nome:"+ s + " Idade:"+ t, 
      Toast.LENGTH_SHORT).show();
  }
}
Apesar de não ser algo que não encorajo, essa solução pode ser útil para alguns tipos de tela. Disponibilizamos a interface "nglauber" para o código JavaScript chamar. Notem que no JavaScript ficou window.nglauber.showToast. Outro detalhe aqui é que existe um bug do Android 2.3 que impede que esse código funcione nessa versão. Outro detalhe é a Annotation @JavascriptInterface que só é necessária a partir do Android 4.2, em versões anteriores, basta o método ser público.

Dica 7 - Definindo uma orientação fixa via código
É possível definir uma orientação fixa para um Activity através do arquivo AndroidManifest.xml através da propriedade screenOrientation.
<activity name=".MinhaActivity"   
  android:screenOrientation="landscape"/>
Mas e se quisermos que essa configuração seja feita dependendo de alguma condição? Podemos usar o código abaixo.
setRequestedOrientation(
  ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

Dica 8 - Versão do Android do Aparelho
Obtendo a versão do Android que está rodando no aparelho.
int apiLevel = Build.VERSION.SDK_INT;
if (apiLevel < Build.VERSION_CODES.HONEYCOMB){
  // Usando Android 2.3 ou inferior
} else if (apiLevel < 
  Build.VERSION_CODES.ICE_CREAM_SANDWICH){
  // Android 3.x
} else {
  // ICS ou superior
}

4br4ç05,
nglauber

sexta-feira, 30 de abril de 2010

Desenvolvendo Android no aparelho real

Olá povo,

Com o crescimento impressionante do Android, os aparelhos estão ficando cada vez mais acessíveis para os usuários. Hoje podemos comprar celulares Android por cerca de R$800. Dessa forma, os desenvolvedores podem começar a deixar um pouco o emulado de lado e partir pra desenvolver e testar suas aplicações no telefone real. Esse mini-tutorial é uma transcrição do site do Android Developers.

Tendo um aparelho Android em mãos, podemos desenvolver e debugar nossas aplicações igualmente como fazemos no emulador. Porém, xistem apenas algumas coisas que devemos fazer antes de começar.
  1. Declare sua aplicação como "debugável" no Android Manifest.
    No Eclipse, você pode fazer isso adicionando a propriedade android:debuggable="true" à tag <application>.

  2. Ligue o "USB Debugging" do aparelho.
    Na home screen (tela principal) do aparelho, pressione a tecla MENU, selecione Settings (Configurações). Abrirá a lista das configurações do aparelho. Selecione Applications (Aplicativos) > Development (Desenvolvimento), então habilite a opção USB debugging (Depuração USB).

  3. Configurando o Sistema operacional pra detectar o telefone.
    • Se você está usa Windows, você necessida instalar os drivers. Para isso vá até a pasta do SDK do Android e execute o aplicativo SDK Setup. Nele, instale o driver USB que está disponível como um pacote opcional. Depois de instalado, quando o Windows detectar o aparelho, instale usando os drivers baixados que se encontram na pasta usb_driver do SDK.
    • Se você está usando Mac OS X, já funciona tudo ok. Pode pular essa etapa.
    • Se você está usando Ubuntu Linux, você necessita adicionar um arquivo de regras que contém a configuração USB para cada tipo de dispositivo que você quer usar para desenvolver. Cada fabricante usa um id diferente. O exemplo de arquivo de regras abaixo mostra como adicionar uma entrada para aparelhos HTC e Motorola. Se quiser adicionar mais fabricantes, basta adicionar mais linhas no mesmo formato com um valor diferente para a propriedade SYSFS{idVendor}.
      1. Log como root e crie esse arquivo: /etc/udev/rules.d/51-android.rules.
      2. Adicione o seguinte conteúdo:
        SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
        SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE="0666"
      3. A primera linha é para linha é para telefones HTC e a segunda para telefones Motorola.
      4. Agora execute:
        chmod a+r /etc/udev/rules.d/51-android.rules

A tabela abaixo apresenta a lista de fabricantes disponível e seus respectivos ids.

ManufacturerUSB Vendor ID
Acer0502
HTC0bb4
Huawei12d1
LG1004
Motorola22b8
Samsung04e8
Sony Ericsson0fce

Podemos verificar os aparelhos conectados executando no terminal adb devices a partir do diretório tools do diretório do SDK. Se estiver conectado, você verá os nomes dos dispositivos na coluna "device."

Se estiver usando Eclipse, select run ou debug normalmente. Será exibida então a tela Device Chooser que lista os emuladores e telefones disponíveis. Selecione o dispositivo que você quer instalar e execute sua aplicação.

4br4ç05,
nglauber