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

quinta-feira, 5 de março de 2015

Dominando o Android: Atualização 3

Olá povo,

Seguem mais algumas sugestões de melhorias enviadas pelos leitores do livro.

Capítulo 4
Página 116. Ficaria mais claro se eu tivesse colocado "os parâmetros before e after dizem o tamanho anterior e atual da String digitada". Pois quando o usuário digita um caractere, a variável after possui o valor 1, e quando ele apaga o valor é 0. Entretanto, se ele copiar um texto qualquer (de 12 caracteres, por exemplo) de um outro lugar do sistema e tentar colar nessa caixa de texto, after terá o valor 12. O mesmo acontece se ele selecionar 5 caracteres da caixa de texto (dando um clique longo e marcando o texto) e recortar, então o valor da variável before será 5.

Capítulo 5
Página 164. Na parte que diz: "Crie o arquivo meu.html dentro da pasta app/src/assets do projeto". O local correto é  app/src/main/assets.

Página 182. Na parte que diz: "Primeiro obtivemos as propriedades personalizadas (...) passando como parâmetro o R.styleable.JogoDaVelha, que definimos no strings.xml.", o correto é o arquivo styles.xml.

Capítulo 6
Página 226. O namespace do XML do arquivo de menu é xmlns:app="http://schemas.android.com/apk/res-auto" ao invés de
xmlns:app="http://schemas.android.com/apk/res/android".

Página 232. A propriedade android:orientation é desnecessária no FrameLayout.

Página 241. Faltou o import da classe android.support.v7.widget.Toolbar. Cuidado para não usar android.widget.Toolbar.

Muito obrigado mais uma vez ao pessoal que está reportando os erros!  Vocês não sabem o quanto estão me ajudando.
A medida que forem encontradas mais erratas, vou colocando aqui.

4br4ç05,
nglauber

domingo, 22 de fevereiro de 2015

Androidos 2015

Olá povo,

Nos dias 8 e 9 de maio estarei na UNIPE em João Pessoa participando do Androidos 2015, um evento totalmente voltado para a plataforma Android. Terei a satisfação de participar falando sobre as novidades do Android Lollipop e sobre Android Wear.
Quem também estará lá é o grande Ricardo Lecheta.


Mais informações, acessem a página do evento no Facebook!

Vejo vocês lá!

4br4ç05,
nglauber

sábado, 21 de fevereiro de 2015

LinguÁgil


Olá povo,

Entre os dias 11 e 14 de março acontecerá em Salvador o LinguÁgil, um evento voltado ao desenvolvimento ágil que contará com diversas palestras e mini-cursos sobre técnicas e tecnologias para acelerar o desenvolvimento de software.
Eu participarei do evento com a palestra "Acelerando o desenvolvimento com Android Libs" onde vamos discutir as bibliotecas mais famosas do mercado, seus prós e contras.
As inscrições estão abertas e a programação completa está disponível no site do evento.

Nos vemos lá!

4br4ç05,
nglauber

sexta-feira, 30 de janeiro de 2015

Dominando o Android: Atualização 2

Olá povo,

Em atenção as pessoas que compraram meu livro, estou reportando os erros que o pessoal está encontrando. Sendo assim, segue abaixo mais algumas atualizações sobre o livro. Quem quiser acompanhar e reportar erratas pode participar do grupo de discussão sobre o livro.

Capítulo 1

Página 43. A pasta values-v11-mcc724-mnc31 informada não funcionaria pois teria que ser respeitada a ordem de avaliação dos recursos. O nome correto seria values-mcc724-mnc31-v11.
Obrigado Douglas Drumond!

Página 46. A propriedade densityDpi da classe Configuration só está disponível na API Level 17 (Android 4.2). E as propriedades screenHeightDp e screenWidthDp na API Level 13 (Android 3.2). Uma alternativa para obter esses valores é utilizar a classe DisplayMetrics.
Obrigado Tatiani Lima!

Capítulo 4

Página 113: No lugar de setEditorActionListener(OnEditorActionListener), usar setOnEditorActionListener(OnEditorActionListener).
Valeu Jorge Felipe (por essa e outras).

Página 134. Na seção "Cabeçalho e Rodapé", no lugar de setListAdapter(Adapter) lê-se listView.setAdapter(Adapter).

Página 136: Na seção "EmptyView", quando fui fazer esse exemplo, ele era inicialmente com uma ListActivity.
public class MainActivity extends ListActivity {
  ...
  public void onCreate(Bundle savedInstanceState){
    setContentView(R.layout.activity_main);
    listView = getListView();
    ...
  }
  ...
}
Com isso, o exemplo funciona corretamente, porque internamente a classe ListActivity define a propriedade emptyView da ListView. Entretanto, no Lollipop, por padrão, a  ListActivity não exibe a ActionBar (barra de título da parte superior), então resolvi herdar de ActionBarActivity. E com isso, esqueci de adicionar a seguinte linha:
listView.setEmptyView(findViewById(android.R.id.empty));

Essa correção já está disponível no GitHub.
Obrigado Vitor Albuquerque!

Capítulo 5

Página 155: No segundo parágrafo, no lugar de android:text, seria android:textColor.

Página 159: Remover propriedade android:background dos botões, uma vez que ela foi definida no arquivos values/styles.xml.

Capítulo 6

Página 195: No único parágrafo, no lugar de equipe, seria hotel.

Geral

Em vários exemplos estou utilizando o valor fill_parent ao invés do match_parent. Entretanto o segundo é o recomendado desde a API Level 8 (Android 2.2). Mas se você observar, o valor das constantes internamente é o mesmo. Então na prática, não faz diferença nenhuma, ele só foi renomeado. Mas, por precaução, utilize match_parent.

--

Bem pessoal! Por enquanto é isso. Desculpem o transtorno, mas é que não houve revisão técnica pois encareceria o livro. Essa incubência ficou para vocês e eu agradeço bastante essa colaboração.

À medida que forem achando alguma coisa, por gentileza reportem no grupo. Vai ajudar a mim e a outros leitores.

4br4ç05,
nglauber

segunda-feira, 26 de janeiro de 2015

Aplicação do blog no GitHub

Olá povo,

Na última terça-feira (20/01) disponibilizei a versão 1.4 do aplicativo do blog no Google Play. Ele sofreu algumas mudanças internas e foi visualmente modificado para seguir alguns (poucos) padrões do Material Design. Ele é compatível com smatphones e tablets Android rodando o Gingerbread (2.3) ou superior.




Mas sem sombra de dúvida, a grande novidade é que o código-fonte está disponível no GitHub!!!
Então, tá esperando o quê? Baixa logo o código e começa a dar uma fuçada no que eu fiz :)

Achou um bug? Tem alguma coisa que você não gostou no aplicativo? Tem alguma melhoria a ser feita? Modifica e faz um push request pra mim! Vamos compartilhar conhecimento :)

4br4ç05,
nglauber

quarta-feira, 21 de janeiro de 2015

Dominando o Android com 20% de desconto!!!

Olá povo,

O meu livro "Dominando o Android" estava até ontem (20/01/2015) com desconto de 25% no site da Novatec. Mas se você perdeu essa oportunidade, não se preocupe!

Adquira o livro com desconto de 20% utilizando o código "GLAUBER"!

Vê se não perde essa chance hein!

4br4ç05,
nglauber