segunda-feira, 27 de julho de 2015

Android Conference 2015

Olá pessoal,

No dia 29 de agosto acontecerá em São Paulo o Android Dev Conference 2015 organizado pelo iMasters em parceria com o GDG São Paulo. Este é um dos principais eventos do Brasil sobre desenvolvimento Android e reunirá cerca de 800 desenvolvedores. O objetivo é abordar temas avançados sobre Android de modo a disseminar esse conhecimento com comunidade de desenvolvedores de modo a aumentar a produtividade e melhorar a qualidade das aplicações desenvolvidas.
Eu participarei do evento juntamente com grandes palestrantes do Brasil que trabalham nas maiores empresas do país. As inscrições estão abertas! Não perca mais essa oportunidade de aprender e aumentar o networking ;)

Nos vemos lá!

4br4ç05,
nglauber

segunda-feira, 13 de julho de 2015

FreeTec 2015

Olá povo,

A Unibratec está promovendo o FREETEC 2015 com palestras e mini-cursos gratuitos. Eu vou estar lá no próximo dia 30/07 para ministrar um codelab de Android. Infelizmente as vagas já esgotaram para esse mini-curso :( Mas tem um monte de coisa boa lá! Dá uma conferida na programação completa e inscreva-se já ;)

4br4ç05,
nglauber

The Developers Conference

Olá pessoal,

A movimentação aqui no blog esse ano está um pouco devagar, principalmente por conta de trabalho, estudos e por uma mudança de endereço que me deixou num corre-corre danado. Então só está dando tempo pra avisar por onde vou estar falando de Android Brasil à fora.

Entre os dias 21 e 25 de julho participarei do TDC (The Developer's Conference) na Universidade Anhembi Morumbi em São Paulo. Um dos maiores eventos do Brasil voltado para desenvolvedores. São mais de 40 trilhas, com 9 horas de conteúdo em cada uma.
No primeiro dia falarei sobre como acelerar a produtividade no desenvolvimento de aplicações Android utilizando bibliotecas que não estão no Android SDK. E nos dias 23 e 24 participarei do Hands-on Lab de Real Sense ministrado pelo meu amigo Felipe Pedroso.

4br4ç05,
nglauber

quinta-feira, 4 de junho de 2015

Intel Software Day 2015


Olá povo,

Nos dias 12 e 13 de junho acontecerá em Salvador o Intel Software Day, um evento sobre tecnologia, inovação e muito desenvolvimento de software, que tem como objetivo levar o que existe de mais novo ao ecossistema de tecnologia brasileiro através de trilhas técnicas e workshops sobre temas como Android, Internet das Coisas, HPC, RealSense e Windows.

Vou participar do evento falando de "Produtividade com Android Libs". Onde vou apresentar a principais bibliotecas utilizadas no desenvolvimento de aplicativos Android.

Também estarão lá meu amigos Tiago Barros (CESAR), Ubiratan Soares (GDE Android), Ricardo Lecheta, e muitas outras feras!

[EDITADO 12/06/2015]


4br4ç05,
nglauber

segunda-feira, 13 de abril de 2015

Explorando libs famosas: Butter Knife

Olá povo,

Nesse post vou falar de mais uma lib famosa entre os desenvolvedores Android.

Butter Knife (http://jakewharton.github.io/butterknife/)
Com ela, você não precisa mais utilizar o bom e velho findViewByid(int) e nem o setOnClickListener ou setOnItemClickListener.
Adicione a dependência no seu build.gradle.
dependencies {
    ...
    compile 'com.jakewharton:butterknife:6.0.0'
}
Depois é só utilizar na sua activity.
public class MainActivity extends ActionBarActivity {

    @InjectView(R.id.edtTexto)
    EditText editText;

    @InjectView(R.id.txtManteiga)
    TextView txtManteiga;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    }

    @OnClick(R.id.btnFaca)
    public void meuClick(View v){
        txtManteiga.setText(editText.getText());
    }
}
Partindo do presuposto que temos um EditText, um TextView e um Button, com os respectivos IDs definidos como edtTexto, txtManteiga e btnFaca. O código anterior utiliza a anotação @InjectView para inicializar os componentes após a chamada ButterKnife.inject(this).
Um outro detalhe aqui é o evento de click que podemos definir com a anotação @OnClick.

Podemos utilizar o @Inject não apenas em Activities, mas em qualquer lugar passando a View como parâmetro.
View view = inflater.inflate(
    R.layout.meu_layout, container, false);
ButterKnife.inject(this, view);
O código anterior, poderia estar, por exemplo em um Fragment ou no construtor de um ViewHolder de um adapter.
É importante resetar a injeção das views em Fragments, e isso deve ser feito preferencialmente no onDestroyView().
@Override 
public void onDestroyView() {
  super.onDestroyView();
  ButterKnife.reset(this);
}
Também é possível associar evento de click em itens de uma ListView.
@OnItemSelected(R.id.list_view)
void onItemSelected(int position) {
  // TODO ...
}
Qualquer dúvida, deixem seus comentários.

4br4ç05,
nglauber

segunda-feira, 30 de março de 2015

Explorando libs famosas: Otto

Olá povo,

Acho que todos que me conhecem sabem que eu não sou muito fã de usar libs de terceiros. Principalmente porque na grande maioria das vezes, é mais fácil você entender apenas o código que é puramente Android, do que ter que lembrar ou saber como uma lib realiza determinado comportamento.
Mas como muita gente gosta, resolvi fazer uma série de posts com algumas bibliotecas Android mais famosas no mercado. E pra começar, vamos falar do Otto.

Otto (http://square.github.io/otto/)
Permite registrar e disparar eventos de/para qualquer parte da aplicação. Adicione a dependência a seguir.
dependencies {
  compile 'com.squareup:otto:1.3.6'
}
A primeira coisa a fazer é instanciar um objeto da classe Bus. Um bom local para fazer isso é na classe que herda de Application (lugar perfeito iniciar os singletons).
import android.app.Application;
import com.squareup.otto.Bus;

public class ExplorandoLibsApp extends Application {

  private Bus bus;

  @Override
  public void onCreate() {
    super.onCreate();
    bus = new Bus();
  }

  public Bus getBus() {
    return bus;
  }
}
Não esqueça de declarar essa classe no AndroidManifest.xml.
 
<application
  ...
  android:name=".ExplorandoLibsApp">
Qualquer classe pode ser enviada como evento...
public class UmaClasseQualquer {

  private String mTexto;

  UmaClasseQualquer(String texto) {
    mTexto = texto;
  }

  public String getTexto() {
    return mTexto;
  }
}
E todo método que assinar um evento será notificado. Para assinar um evento, use a anotação @Subscribe. E para disparar o evento utilize o método post(evento) do objeto Bus.
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Toast;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;

public class MainActivity extends ActionBarActivity {

    private Bus mBus;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      mBus = ((ExplorandoLibsApp)getApplication())
             .getBus();
      mBus.register(this);
    }

    public void dispararEventoOtto(View v){
      mBus.post(new UmaClasseQualquer("Mensagem"));
    }

    @Subscribe
    public void chegouEvento(UmaClasseQualquer event) {
      Toast.makeText(this, event.getTexto(), 
        Toast.LENGTH_SHORT).show();
    }
}
Obtemos a instância do Bus no onCreate() e informamos que essa classe ouvirá eventos do Bus por meio do método register. O método dispararEventoOtto() é invocado ao clicar em um botão, e nele disparamos o evento chamando o método post(). Quando isso ocorre o método chegouEvento() é invocado.

Outra biblioteca que realiza o mesmo trabalho é o EventBus.

Podemos realizar comportamento similar utilizando as classes BroadcastReceiver e LocalBroadcastManager.

4br4ç05,
nglauber

terça-feira, 17 de março de 2015

Xiaomi MI4

Olá povo,

Eu testei durante duas semanas o MI4, telefone da chinesa Xiaomi e nesse post vou descrever minha opinião sobre esse aparelho.

As especificações são bem generosas a começar pelo seu tamanho. As dimensões do smartphone são 68.5/8.9/139.2mm. O MI4 vem com um processador Snapdragon Quad-Core de 2.5GHz, 3GB de RAM, armazenamento de 16GB a 64GB e uma bateria de 3080mAh. A tela é gigante de 5" (sem botões na tela) e com uma resolução de 1920x1080 (441ppi) traz uma boa nitidez. As câmeras traseira e frontal de 13MP e 8MP respectivamente são bem interessantes e fabricadas pela Sony.

O MI4 vem com o Android 4.4 MIUI, uma customização do Android padrão, similar ao que temos nos aparelhos da Samsung (que usa o TouchWiz). É notório o objetivo da ROM em copiar o visual e alguns comportamentos do iOS. O que é mais perceptível pelo o usuário que já esteja acostumado com o Android é a ausência do menu de aplicativos, dessa forma, todos os aplicativos ficam na home screen como acontece no iOS (o que eu particularmente não gosto). Entretanto, os widgets do Android como relógio, Gmail, etc., podem ser adicionados à homescreen normalmente.

Um ponto positivo (pelo menos para mim que tenho um Nexus 5) foi a bateria. O MI4 aguentou mais de 24 horas com todos os recursos ligados: Wi-Fi, 4G e Bluetooth (uso no Android Wear). Mas infelizmente você não pode trocar (como em alguns aparelhos da Samsung).

A câmera frontal tem um recurso interessante: detecção de face e sugestão de idade. Tá... eu tô acabadinho mesmo :(

A tela gigante (ainda mais sem os botões lógicos, substituídos pelos botões físicos) traz o problema de alcançar as opções da tela com o "dedão". O MIUI resolve isso com um recurso bem interessante (similar ao do iOS) que é reduzir a área de toque, bastando para isso deslizar da esquerda pra direita na área dos botões físicos.


Uma coisa que me deixou muito decepcionado foram as notificações. Esse recurso do Android que eu sou fã de carteirinha foi "capado" no MIUI. Elas não expandem e não mostram as ações associadas (como o excluir/arquivar do Gmail), então eu só tenho a opção de clicar na notificação ou dispensa-la.

Testei também a Xiaomi Wristband, uma pulseira que calcula a quantidade de passos percorridos durante o dia, vibra ao disparar alarmes e funciona como "smart unlock", ou seja, enquanto você estiver com a pulseira, não precisa digitar o padrão de desbloqueio. Outro recurso bacana da pulseira é monitorar o seu sono! Ao usá-la enquanto dorme, ela monitora quanto tempo você dormiu em sono leve, profundo e quando acordou. Segundo o fabricante, a bateria da pulseira dura 30 dias, e enquanto usei, realmente não precisei carregar.
O aplicativo chamado MiFit sincroniza os dados com a pulseira e exibe um relatório diário do seus passos. Uma pena que ele não foi traduzido para português.
Outro ponto negativo do aparelho são os aplicativo de contatos/telefone. Eles aparentam ser bem mal-acabados. Principalmente se comparados aos do Android nativo.
Você pode personalizar o sistema por meio de temas que podem ser baixados gratuitamente.

Um ponto negativo ao meu ver foi a ausência do Google Now na home screen. Tentei usar comandos de voz pelo aparelho e pelo Android Wear e não consegui.

E você o que achou? Possui um MI4? Mande suas dúvidas ou sugestões! ;)

4br4ç05,
nglauber