domingo, 19 de outubro de 2014

Brincando com Material Design no Lollipop

Olá povo,

Tô sem tempo de postar aqui no blog porque estou trabalhando para finalizar o meu livro. Com o lançamento do Android 5.0 Lollipop, me vi obrigado a escrever um capítulo só sobre ele.
Olha só um esboço do exemplo de Material Design do capítulo sobre o Lollipop.


Tenham fé, que um dia esse livro sai :)

4br4ç05,
nglauber

terça-feira, 7 de outubro de 2014

Motorola Moto 360 x Samsung Gear Live

Olá povo,

Todo participante da Google I/O 2014 ganhou um smartwatch no dia do evento. Podíamos optar pelo Samsung Gear Live ou o LG G Watch. Acabei optando pelo relógio da Samsung pelo tamanho da tela e pelo sensor de batimento cardíaco.
Mas o Google prometeu que enviaria o Motorola Moto 360 "em breve". Devo adimitir que fiquei cético de eles enviariam aqui para o Brasil. Mas depois de muito esperar ele finalmente ele chegou!*
Sendo assim, me senti obrigado a fazer um comparativo entre meus dois smartwatches. As principais diferenças e que eu achei a usar os dois estão descritas a seguir.
  • A tela redonda do M360 aparenta ser maior do que a do Gear Live o que facilita a leitura.
  • O modelo do M360 que eu recebi tem uma pulseira com o fecho de fivela, diferente do Gear Live que é de pressão. Achei mais chatinho de colocar o relógio no pulso, mas em compensação você não corre o risco do relógio sair voando e cair numa poça de lama num dia de chuva caso você se enrosque em alguma coisa. É... aconteceu comigo... :( Mas ele sobreviveu e só saiu com um pequeno arranhão na parte metálica :)
  • Não sei se todos sabem, mas a área útil da tela do M360 não é completamente redonda. Na parte inferior fica uma área física onde encontra-se o sensor de luminosidade/presença que ocupa parte da tela do aparelho.
  • Um detalhe que não me agradou no M360 é que apenas 1dos 7 mostradores padrão (chamados de wearfaces) mostra a data. No Gear Live temos 13 mostradores dos quais 4 mostram a data. Isso é besteira, é só ir no Google Play e baixar um (ou fazer um, porque não?)...
  • Sem dúvida o que mais me incomodou foi que, para ver as horas no M360, eu tenho que movimentar o braço. Diferentemente do que acontece no Gear Live, que mesmo com o braço imóvel, os ponteiros são exibidos (ou os números no caso do mostrador digital), e ao fazer o gesto de ver as horas a tela do aparelho é acesa por completo. Achei estranho não ter isso no M360, pois o Moto X já tem um comportamento parecido.
  • O ponto negativo do item anterior se transforma em ponto positivo no quesito duração da bateria. O M360 durou comigo facilmente 2 dias, enquanto que o Gear Live dura entre 1 dia e 1 e meio.
  • O caregador por indução do M360 é muito fodástico, além de não precisar conecta-lo a nada, a bateria carrega bem rápido. Já o carregador do Gear Live é ruim de conectar/desconectar, sem contar que eu acho muito frágil. Sempre acho que ele pode quebrar a qualquer momento (como aconteceu com um conhecido na imagem abaixo).
  • Ambos possuem sensor de batimento cardíaco, mas o do M360 eu achei legal :)
  • E para desenvolver? No Gear Live você pode desenvolver utilizando o cabo USB normalmente, já no M360 você terá que fazer o deploy via bluetooth.
[EDITADO em 13/10]
Fui testar um layout para tela redonda no Moto360 e descobri que ele  só carrega o layout da tela quadrada :(
https://code.google.com/p/android/issues/detail?id=76097

Ao voltar a usar o Gear Live hoje, notei que ele é mais fluido que o Moto360.

[EDITADO em 15/10]
Notei que a frente do relógio (wearface) influencia drasticamente na bateria. Usei uma frente ontem que a bateria durou em torno de 13 horas. Utilizei uma do próprio aparelho hoje e após 14 horas de uso ainda restavam 51% de bateria.
[/EDITADO]

Resultado final? Bem eu compraria qualquer um dos dois facinho :)
Atualmente o M360 está sendo vendido por 249.99 dólares enquanto que o Gear Live é 199.99.

Falei alguma besteira? Tem alguma dúvida? Deixe seu comentário!

4br4ç05,
nglauber

*Chegou pelo FedEx e o Google pagou todos os impostos... Valeu GOOGLE!!!!

segunda-feira, 8 de setembro de 2014

Falando de Android pelo Brasil

Olá povo,

A Google I/O desse ano veio cheia de novidades, principalmente para o Android. A plataforma expandiu seus horizontes e além dos smartphones e tablets ela agora está presente em smartwatches, TVs e automóveis.
Depois de acompanhar o evento de perto, vou sair por aí divulgando as novidades com vocês. Vou dar algumas palestras sobre Android L e Android Wear, e quem estiver por perto, sintam-se convidados para comparecer e batermos um papo :)
Segue abaixo as datas e locais:

27/09: DevFest Centro-Oeste
Local: ACIEG. Rua 14, nº 50, Edif. Santino Lyra Pedrosa
Setor Oeste, Goiânia-GO
Informações: http://devfestcentrooeste.com.br/

EDITADO em 30/09. Abaixo os slides da palestra.



10/10: FAFICA
Local: FAFICA. Rua Azevedo Coutinho, S/N - Petrópolis
Caruaru - PE
Informações: http://www.fafica.com/

18/10: DevFest Nordeste
Local: Radisson Hotel. Rua Dr. Bezerra de Menezes, 40
Aracaju-SE
Informações: http://2014.devfestne.com.br/

EDITADO em 18/10. Abaixo os slides da palestra.

 E para fechar o ciclo, vou participar (não palestrando) do GDE Summit 2014, que é o encontro mundial dos GDEs no HQ da Google em Mountain View nos dias 17 e 18/11. Espero trazer mais novidades para os desenvolvedores brasileiros.

4br4ç05,
nglauber

terça-feira, 19 de agosto de 2014

Cuidado ao falar com especialistas

Olá povo,

O texto abaixo é do excelente livro "O Programador Pragmático: De aprendiz a mestre" (Cap.1, pág.39). Nesse trecho, os autores descrevem como devemos agir ao entrarmos em contato com especialistas. Sua publicação original é de 1999, mas seus conceitos são certamente válidos até hoje, entretanto tive a ousadia de fazer alguns mínimos ajustes.

"Com a adoção global da internet, os especialistas se tornam tão acessíveis quanto nossa tecla Enter. Portanto, como encontrar um e fazê-lo conversar com você? Conhecemos alguns truques simples:

  • Saiba exatamente o que quer perguntar e seja tão específico quanto puder.
  • Formule sua pergunta cuidadosa e polidamente. Lembre-se de que você está pedindo um favor; não dê a impressão de que está exigindo uma resposta.
  • Uma vez que tiver formulado sua pergunta, pare e pense novamente. Selecione algumas palavras-chave e pesquise na web no Google.
  • Decida se quer perguntar pública ou privadamente. Grupos de notícias Fóruns de discussão e o stack overflow são ótimos pontos de encontro de especialistas em qualquer tópico, mas algumas pessoas não gostam de perguntar publicamente tomam cuidado devido a natureza pública desses grupos. Alternativamente, você sempre pode mandar um email direto para o especialista. De uma forma ou de outra, use uma linha de assunto significativa ("Preciso de ajuda!!!" não é suficiente).
  • Sente-se e tenha paciência. As pessoas são ocupadas e pode demorar dias para chegar uma resposta específica.

Para concluir, não deixe de agradecer qualquer pessoa que lhe responder. E se encontrar pessoas fazendo perguntas que você pode responder, desempenhe seu papel e participe."

4br4ç05,
nglauber


segunda-feira, 18 de agosto de 2014

Motorola Moto 360

Olá povo,

Quem participou da Google I/O 2014 em San Francisco foi presenteado com dois smartwatches com Android Wear. Durante o evento, o participante poderia optar por um Samsung Gear Live ou um LG G Watch, ambos com a tela quadrada. O segundo é o Motorola Moto 360, o primeiro (e único até agora) com tela redonda, e ele seria enviado posteriormente para o endereço do participante.
Confesso que fiquei muito empolgado, mas ao mesmo tempo sem muitas esperanças de que ele pudesse ser entregue aqui no Brasil.
Mas dias atrás recebi um email da equipe do Google I/O solicitando que fosse preenchido um formulário com os meus dados e o endereço para que o aparelho fosse entregue na minha residência. Aê!!! Fuderoso!... Mas um trecho do email deixou pessoas de todo o mundo na dúvida...

"We will only be able to ship Moto 360 to countries for which devices have been certified for use. ... Unfortunately, if your shipping address is not in one of the certified countries we will be unable to ship you a Moto 360."

Ok. Ele só será entregue em países certificados. Mas quais são? Bem, depois de pesquisar muito, achei um post de Phil Barrett relatando uma conversa com o suporte da Motorola. No final das contas, não dizia nada, apenas que nem a Motorola tem essa lista...
Mas no último dia 15/08 veio a boa notícia: o aparelho foi homologado pela Anatel e será produzido na fábrica de Jaguariúna-SP!!! Com isso, espero que os brasileiros que foram para o evento, recebam seu Moto 360 em casa :)

Agora é esperar e ver se o brinquedinho chega.
Aviso quando tiver novidades.

EDITADO em 03/10/2014
Meu Moto 360 chegou ontem. Em breve escrevo um review com minha opinião sobre o brinquedinho e um comparativo com o Samsung Gear Live.
Parabéns Google! A cada dia essa empresa merece meu respeito e admiração.

4br4ç05,
nglauber

Fonte:
http://g1.globo.com/tecnologia/noticia/2014/08/anatel-autoriza-venda-do-relogio-inteligente-moto-360-no-brasil.html
http://www1.folha.uol.com.br/tec/2014/08/1501095-anatel-homologa-moto-360-e-libera-venda-do-aparelho-no-brasil.shtml
http://www.gazetadopovo.com.br/tecnologia/conteudo.phtml?id=1491644

terça-feira, 12 de agosto de 2014

TechVideo: Android Wear

Olá povo,

O CESAR.EDU está com um projeto chamado TechVideo que tem o objetivo de disseminar o conhecimento técnico da instituição com a comunidade. Com isso, você ficará por dentro dos assuntos mais atuais do mercado com os professores do CESAR.EDU que também são colaboradores do C.E.S.A.R..
O primeiro vídeo foi comigo, e o assunto é "Android Wear", o sistema operacional do Google para dispositivos "vestíveis".
Quem não viu meus outros posts sobre o Android Wear, pode clicar aqui, aqui e aqui.

4br4ç05,
nglauber

sexta-feira, 11 de julho de 2014

Android Wear - Apps

Olá povo,

Nesse terceiro post da série sobre Android Wear, vou mostrar como criar aplicativos específicos para smartwatches. Se você perdeu os dois primeiros posts, leia aqui e aqui.
Crie um novo projeto no Android Studio e após informar o nome e o pacote, clique em Next. Será exibida a tela a seguir, onde você deve selecionar o checkbox "Wear". Depois, clique em Next.
Na próxima tela do assistente, temos a opção de criar uma nova Activity, marque a opção Blank Wear Activity e clique em Next.
Dê um nome à sua Activity e o arquivo de layout que apontará para outros dois arquivos de layout: um para relógios redondos (como o Moto 360) e outro para relógios quadrados (como o Samsung Gear Live).
Clique em Finish e o nosso projeto Android Wear estará criado. Percebam que na pasta res/layout foram criados três arquivos: activity_my.xml, rect_activity_main.xml, round_activity_my.xml. O primeiro é listado abaixo:
<android.support.wearable.view.WatchViewStub
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/watch_view_stub"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:rectLayout="@layout/rect_activity_my"
    app:roundLayout="@layout/round_activity_my"
    tools:context=".MyActivity"
    tools:deviceIds="wear"/>
Notem que o conteúdo desse arquivo é apenas uma WatchViewStub que aponta para o @layout/rect_activity_my quando o werable for quadrado e @layout/round_activity_my para telas redondas.
Nosso exemplo será bem simples, clicaremos em um botão e ativaremos o reconhecimento de voz do wear. Poderemos falar (e no caso do emulador, digitar) e o texto que for reconhecido será exibido em um TextView. Para tal, abra o arquivo res/layout/rect_activity_my.xml e deixe-o como abaixo.
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MyActivity"
    tools:deviceIds="wear_square"
    android:gravity="center">
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_square" />
    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:src="@android:drawable/ic_btn_speak_now"/>
</LinearLayout>
Não temos nada de mais nesse arquivo... Então vamos ver como ficará a Activity.
public class MyActivity extends Activity 
    implements
        View.OnClickListener,
        WatchViewStub.OnLayoutInflatedListener {

    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        WatchViewStub stub = (WatchViewStub) 
                findViewById(R.id.watch_view_stub);
        stub.setOnLayoutInflatedListener(this);
    }

    @Override
    public void onLayoutInflated(WatchViewStub stub) {
        mTextView = (TextView) 
                stub.findViewById(R.id.text);
        stub.findViewById(R.id.button)
                .setOnClickListener(MyActivity.this);
    }

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(
            RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        
        intent.putExtra(
            RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        
        startActivityForResult(
            intent, 1 /* Request code */);
    }

    @Override
    protected void onActivityResult(int requestCode,
            int resultCode, Intent data) {
        
        super.onActivityResult(
            requestCode, resultCode, data);

        if (requestCode == 1 
            && resultCode == RESULT_OK) {

            List<String> results = 
                data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);
            String spokenText = results.get(0);
            mTextView.setText(spokenText);
        }
    }
}
No onCreate pegamos a referência do WatchViewStub e setamos o listener para sermos notificados quando o arquivo de layout for carregado com o método setOnInflaterListener. Para isso, nossa Activity implementa a interface WatchViewStub.OnLayoutInflatedListener e consequentemente seu método onLayoutInflated. Nele, inicializamos o TextView e setamos o evento de clique do botão.
Ao clicarmos no botão, iniciamos a Activity de reconhecimento de fala e no onActivityResult, pegamos a lista dos resultados do que foi dito, pegamos o primeiro item da lista e exibimos no TextView. Execute a aplicação e veja o resultado.
Não achei uma forma fácil de excluir uma aplicação no relógio, sendo assim você pode usar o comando adb no terminal.
adb shell pm uninstall -k pacote.da.sua.app

Se você estiver com mais de um device conectado, pode usar a opção -s.
adb -s SERIAL shell pm uninstall -k pacote.da.sua.app

Para saber o serial do dispositivo é só utilizar o comando
adb devices

Qualquer dúvida, deixem seus comentários.

4br4ç05,
nglauber

Fonte: http://developer.android.com/training/wearables/apps/index.html