quarta-feira, 31 de dezembro de 2014

2014 o melhor ano da minha vida

Olá povo,

O ano de 2014 foi fantástico para mim, sem dúvida o melhor de todos profissionalmente falando (pessoalmente, tudo na paz). Foram muitas aulas de Android, no curso de graduação da Unibratec e uma turma de pós-graduação na FJN em Juazeiro do Norte-CE.
Em abril, fui nomeado o primeiro Google Developer Expert de Android na América Latina, graças à todos os meus alunos, aqueles que lêem meu blog, meus artigos e assistem minhas palestras.
Com essa nomeação, fiz minha primeira viagem internacional: fui para os Estados Unidos participar do Google I/O em San Francisco. Aproveitei a viagem e conheci o HQ do Google em Mountain View. Repeti a dose em Novembro para GDE Summit (encontro anual dos GDEs).
Também palestrei algumas vezes esse ano, boa parte sobre Android Wear e Android Lollipop: no lançamento do GDG Recife, na FAFICA em Caruaru, no próprio CESAR em um intervalo técnico, nos DevFest do Centro-Oeste (em Goiânia) e do Nordeste (em Aracajú) e NextLevel Apps (em São Paulo).
E para coroar 2014, meu livro "Dominando o Android" que comecei a escrever em abril, foi publicado e o lançamento oficial acontecerá em janeiro/2015.

E 2015? Janeiro começa com o lançamento do livro (próxima semana divulgo a data/horário). Vou ministrar a disciplina de Android na pós-graduação da Unibratec, e continuarei com minhas turmas de graduação. Isso, é o que eu sei até agora, mas espero que esse ano novo seja tão bom quanto esse que está passando.

Obrigado a todos que participaram do meu 2014. Conto com todos vocês em 2015, que tem tudo para ser SENSACIONAL!

[EDITADO 01/01/2015]
Cometi a imbecilidade de esquecer que uma das melhores coisas desse ano foi a quantidade de pessoas que conheci. Todo o pessoal dos GDGs: Marcelo Quinta, Silas Limeira, Bianca Ximenes, Euler Neto, Joselito Junior, Erick Mendonça, Luis Leão, Juarez Filho e Roberto Brandini. Os Googlers daqui do Brasil: Alê Borba, Neto Marin e José Papo. Os GDEs brasileiros: Ciro Nunes, Zeno Rocha, Alline OliveiraDaniel Viveros e Lúcio Maciel. Sem contar os GDEs de fora: Mario Viviane, Erik Hellman, Eyal Lezmy, Sebatian Mauer, Mike Wolfson e Cyril Mottier. E os roommates  na Google I/O: Alexandre Tarifa e Paulo Fernandes.

Se eu esqueci de alguém, me avisem que eu atualizo a lista :)
[/EDITADO]

4br4ç05,
nglauber

quarta-feira, 3 de dezembro de 2014

Livro "Dominando o Android"

Olá povo,

É com uma enorme satisfação, que após meses de trabalho, estou lançando meu livro pela editora Novatec entitulado Dominando o Android: do básico ao avançado.
Este livro é destinado a estudantes e profissionais de desenvolvimento de software que querem aprender a desenvolver aplicativos para a plataforma Android. Dominando o Android aborda desde os conceitos mais básicos até as técnicas mais avançadas no desenvolvimento de aplicativos para plataforma mobile do Google.
Por meio de exemplos práticos e didáticos você aprenderá:
  • Criar aplicativos para smartphones e tablets Android.
  • Conhecer os principais componentes para construir interfaces gráficas elegantes e compatíveis com diversos tamanhos e densidades de tela.
  • Persistir dados locais com SQLite e no cartão de memória do aparelho.
  • Acessar web services para enviar e receber dados.
  • Utilizar serviços do Google, tais como: Maps, Cloud Messaging, YouTube, Google+ e AdMob. 
  • Trabalhar com serviços, broadcast receivers, notificações e app widgets.
  • Deixar sua aplicação mais divertida usando animações e recursos multimídia. 
  • Criar aplicativos para os relógios inteligentes (smartwatches) com Android Wear.
  • Saber as principais novidades do Android 5.0 Lollipop. 
Ao final, o leitor estará pronto para projetar e desenvolver seus próprios aplicativos e publicá-los no Google Play.

A capa do livro foi feita pelo meu grande amigo Leo Macedo e o prefácio foi escrito por José Papo e Neto Marin do Google Brasil. Conto ainda com a participação ilustre do meu amigo Marcelo Quinta no capítulo sobre Google Play.

O lançamento do livro [ocorreu dia 14/01/2015]  ainda não está 100% definido, mas provavelmente será na segunda semana de janeiro/2015. Quando tiver mais novidades, posto aqui.

Os interessados, entrem no site da Novatec e vejam como adquirir o seu :)

O código-fonte está disponível no GitHub e se quiser tirar dúvidas sobre o livro, inscreva-se aqui.

4br4ç05,
nglauber

quarta-feira, 12 de novembro de 2014

Muitas coisas acontecendo...

Olá povo,

Faz tempo que não coloco nada técnico aqui não é? Pois é... é que muitas coisas estão acontecendo esse ano para mim e consumindo todo o meu tempo. Além de trabalhar no CESAR e ministrar aulas à noite na Unibratec muitas coisas aconteceram...
Desde abril, quando recebi a nomeação de GDE (Google Developer Expert) o ano acelerou e não parou mais. Entre abril a junho estava dando aulas em finais de semana alternados na FJN em Juazeiro do Norte. Em maio, ainda estava fazendo a vistoria do apartamento que eu comprei (e ainda não recebi, não é Cosil?). Começo de junho foi o fim do semestre letivo na Unibratec, então tinha que fazer avaliação de projeto da disciplina, segunda chamada, prova final, etc.
No meio de junho fiz minha primeira viagem internacional e realizei meu sonho nerd :) conhecer o Google em Mountain View e participar de um Google I/O em San Francisco. Foi simplesmente fantástico e é uma experiência que eu quero repetir quantas vezes for possível.
Mas antes da viagem, eu participei do lançamento do GDG (Google Developers Group) Recife a convite do meu amigo Joselito Junior. O evento contou com a participação do Alê Borba e do Zeno Rocha.
Em julho, mudei de projeto no CESAR, e tive que correr atrás para estudar realidade aumentada com Android (muito legal por sinal) e gravei um vídeo sobre Android Wear para o CESAR.edu.
Agosto foi mais tranquilo... só teve o livro mesmo... Oh, wait! Durante todos os meses, desde abril, trabalhei nesse danado desse livro, mas depois eu volto a falar dele :)
Em setembro fiz um intervalo técnico lá no CESAR sobre Android Wear e palestrei no GDG DevFest Centro-Oeste em Goiânia, terra do meu amigo Marcelo Quinta que conheci no Google Dev Bus.
Em outubro uma outra realização pessoal: ministrar uma palestra na minha terrinha :) Falei sobre Android L e Wear na FAFICA em Caruaru a convite da minha amiga Jeane|Jéssica|Joyce Teixeira. E uma semana depois estava fazendo a abertura do GDG DevFest Nordeste em Aracajú onde reencontrei com o Joselito, Alê, Silas, e todos dos GDGs do nordeste.
Agora em novembro (dia 16), estarei de férias. Descansar? Que nada! Vou participar do meu primeiro GDE Summit, o encontro anual dos GDEs que acontecerá no Google em Mountain View (espero trazer novidades para vocês). Enquanto isso, meu livro está em fase de revisão final na Novatec Editora. E até o final do ano já deve estar disponível.
Em dezembro, a convite do mestre Neto Marin, vou participar do NextLevelApps. Evento do Google Brasil para melhorar aplicativos existentes no Google Play.

Resumindo galera, se eu não postei muito esse ano, é que foi MUITA COISA ACONTECENDO na minha vida...

4br4ç05,
nglauber




sexta-feira, 31 de outubro de 2014

Next Level Apps

Olá povo,

No próximo dia 13 de dezembro vou participar do Next Level Apps, uma iniciativa gratuita do Google que visa ajudar a evoluir aplicativos Android já publicados. No evento haverá uma série de palestras de alta relevância e com conteúdos variados.
O evento é aberto a empresas de qualquer porte, startups e empreendedores ou desenvolvedores individuais que já tenham publicado um aplicativo Android, mas acham que podem ter um aplicativo ainda melhor!
Eu vou participar ministrando um CodeLab de Android Wear explicando como integrar seus aplicativos aos smartwatches, otimizar notificações e também conhecer as melhores práticas dessa nova plataforma do Google, lançada no Google I/O 2014.

O evento acontecerá das 08:00 às 21:00 no Centro de Convenções Rebouças, localizado na Rua Doutor Enéas de Carvalho Aguiar, 23 - Cerqueira Cesar, São Paulo.

Mais informações em www.nextlevelapps.mobi

[EDITADO 15/12/2014]
Segue abaixo os slides da minha apresentação (ou clicando aqui)

O código-fonte está disponível em: https://github.com/nglauber/NextLevelApps.

Ao pessoal que assistiu e avaliou minha palestra, muitíssimo obrigado! Fiquei muito feliz com essa notícia.
[/EDITADO]

4br4ç05,
nglauber

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).

    [EDITADO em 15/12] O conector do meu Gear Live quebrou... :( [/EDITADO]
  • 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/

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


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

terça-feira, 8 de julho de 2014

Android Wear - Notifications

Olá povo,

No post anterior, falamos de como configurar o ambiente para iniciar um emulador do Android Wear e como conecta-lo ao smartphone/tablet. Também vimos que as notificações disparadas nos handhelds (smatphones/tablets) ficam sincronizadas no smartwatch. Nesse post vou mostrar como se comportam as notificações nos Android Wear.

Crie um novo projeto no Android Studio 0.8 (ou superior), defina o nome do projeto e seu respectivo pacote e clique em Next. A janela abaixo será exibida, então marque apenas a opção "Phone and Tablet" (spoiler: o próximo post será sobre apps exclusivas para wearables).
Adicione uma Activity em branco ao projeto e conclua o assistente.
Nosso projeto será simples, terá uma Activity principal e outra (DetalheActivity) que receberá uma mensagem vinda do relógio. Na MainActivity, adicione os dois métodos abaixo que usaremos mais adiante.
private NotificationCompat.Builder
    criarNotificacao(String title, String text) {

    return new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_like)
        .setContentTitle(title)
        .setContentText(text)
        .setAutoCancel(true)
        .setDefaults(NotificationCompat.DEFAULT_ALL);
}

private void dispararNotificacao(
    Notification notification, int id) {

    NotificationManagerCompat notificationManager =
        NotificationManagerCompat.from(this);

    notificationManager.notify(id, notification);
}
Nada especial nesses dois métodos. O primeiro cria objeto NotificationCompat.Builder que constrói uma notificação com as propriedades mais comuns: título, texto, ícone, cor do led, som e vibração padrão (isso é feito na chamada ao setDefaults). O segundo dispara a notificação usando a classe NotificationManagerCompat. Mas o importante aqui é que essa classe está na versão 20 da API de compatibilidade, então certifique-se de que no seu arquivo build.gradle esteja com o appcompat-v7:20. Outra detalhe é que se você não estiver rodando no emulador do Android L, use o compileSdkVersion com o valor 'android-19' conforme abaixo.
apply plugin: 'com.android.application'

android {
    compileSdkVersion 'android-19'
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "nglauber.android.testewear"
        minSdkVersion 10
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:20.+'
}
Então se dispararmos uma notificação simples podemos utilizar o método abaixo.
private void notificacaoSimples() {
    Intent viewIntent = 
        new Intent(this, MyActivity.class);

    PendingIntent viewPendingIntent =
        PendingIntent.getActivity(
            this, 0, viewIntent, 0);

    NotificationCompat.Builder notificationBuilder =
        criarNotificacao("Título", "Texto")
            .setContentIntent(viewPendingIntent);

    dispararNotificacao(
        notificationBuilder.build(), 1);
}
A notificação aparecerá no handheld e no relógio que ficará como abaixo.
Como podemos ver, não fizemos nada de especial do wear, então se você já fez seu aplicativo com notificações, elas estarão integradas com o wearable automaticamente (se eles estiverem pareados, óbvio). Outra coisa que podemos fazer em handhelds e que é ótimo nos relógios são as ações. Vamos ver como adicionar uma...
private void notificacaoComAcao() {
    Intent mapIntent = new Intent(Intent.ACTION_VIEW);
    Uri geoUri = Uri.parse(
        "geo:0,0?q=" + Uri.encode("Av.Caxangá"));
    mapIntent.setData(geoUri);

    PendingIntent mapPendingIntent =
        PendingIntent.getActivity(
            this, 0, mapIntent, 0);

    NotificationCompat.Builder notificationBuilder =
        criarNotificacao("Localização", "Av. Caxangá")
        .setContentIntent(mapPendingIntent)
        .addAction(R.drawable.ic_map, 
            "Abrir mapa", mapPendingIntent);

    dispararNotificacao(
        notificationBuilder.build(), 1);
}
Uma notificação similar a anterior será exibida no relógio, mas se fizermos o swipe para esquerda, veremos essa ação.
Ao clicarmos nessa ação, o aplicativos de mapa (Google Maps ou Waze, por exemplo) será iniciado no smartphone/tablet. Esse exemplo também não usa nada especial do Android Wear :(
Então vou deixar de enrolação e mostrar algo que só funcione no wear: responder uma notificação a partir do relógio como é feito no Gmail.
private void notificacaoComResposta() {
    RemoteInput remoteInput = new RemoteInput.Builder(
        DetalheActivity.EXTRA_VOICE_REPLY)
        .setLabel("Diga a resposta")
        .build();

    Intent replyIntent = new Intent(
        this, DetalheActivity.class);

    PendingIntent replyPendingIntent =
        PendingIntent.getActivity(
            this, 0, replyIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Action action =
        new NotificationCompat.Action.Builder(
            R.drawable.ic_reply, "Responder", 
                replyPendingIntent)
            .addRemoteInput(remoteInput)
            .build();

    NotificationCompat.WearableExtender nwe =
        new NotificationCompat.WearableExtender();    

    Notification notification =
        criarNotificacao(
            "Título", "Passe a página p/ responder")
            .extend(nwe.addAction(action))
            .build();
    dispararNotificacao(notification, 1);
}
Quando a notificação for disparada, ao deslizar para a esquerda, teremos a ação de responder.

Ao clicarmos na ação, a tela do comando de voz será exibida, então podemos falar nossa resposta (ou digitar se você estiver usando o emulador).

Como podemos observar, disparamos uma Intent para DetalheActivity (que você deve criar), e nela podemos capturar o texto falado no relógio utilizando o código abaixo.
private CharSequence obterTextoFalado(Intent intent) {
    Bundle remoteInput = RemoteInput
        .getResultsFromIntent(intent);
    if (remoteInput != null) {
        return remoteInput
            .getCharSequence(EXTRA_VOICE_REPLY);
    }
    return null;
}
Muito simples não? Espero que todos os aplicativos de troca de mensagens (como WhatsApp) implementem isso, pois é muito legal! :)
Mas além de ações, podemos adicionar páginas que podem ser visualizadas fazendo o swipe para esquerda.
private void notificacaoComPaginas() {
    Intent viewIntent = new Intent(
        this, MyActivity.class);
    PendingIntent viewPendingIntent =
        PendingIntent.getActivity(
            this, 0, viewIntent, 0);

    NotificationCompat.Builder nb =
        criarNotificacao("Título", "Página1")
        .setContentIntent(viewPendingIntent);

    NotificationCompat.BigTextStyle pagesStyle =
        new NotificationCompat.BigTextStyle()
            .setBigContentTitle("Página 2")
            .bigText("Um monte de texto aqui...");

    Notification secondPageNotification =
        new NotificationCompat.Builder(this)
            .setStyle(secondPageStyle)
            .build();

    Notification twoPageNotification =
        new NotificationCompat.WearableExtender()
            .addPage(pagesStyle)
            .extend(nb)
            .build();

    dispararNotificacao(
        twoPageNotification, 1);
}


Assim, podemos ter um conteúdo maior na notificação utilizando páginas.

É isso aí povo. Nós como desenvolvedores agora temos que pensar que as notificações disparadas no seu aparelho também aparecerão nos smartwatches. Então não perca a oportunidade de fazer sua aplicação funcionar bem também nos relógios com Android Wear.

Qualquer dúvida, deixem seus comentários.

4br4ç05,
nglauber

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

sábado, 5 de julho de 2014

Android Wear


Olá povo,

No Google I/O 2014, um dos principais destaques foi o Android Wear, versão do Android focada em "dispositivos vestíveis", em especial os smartwatches, ou relógios inteligentes. Cada participante ganhou um e poderia optar por um dos dois modelos: o Samsung Gear Live ou o LG G watch. Optei pelo da Samsung devido ao tamanho da tela um pouco maior que o da LG, mesmo sabendo que a bateria durava um pouco menos. Após uma semana de uso, estou satisfeito com o "brinquedinho".
Uma coisa muito bacana de usar o relógio é que ele fica sincronizado com o seu smartphone/tablet, dessa forma toda notificação disparada aparece em ambos os devices. Assim, quando uma notificação é removida do relógio (fazendo o swipe para direita) ela é removida do smartphone/tablet e vice-versa.

Mas não é porque você não tem o relógio que você não pode brincar com o Android Wear. Nesse post vou mostrar como configurar o ambiente para começarmos a brincar os relógios Android.

O que precisaremos?
1) Inicialmente necessitamos da atualização do Google Play Services 5, Google Search e do aplicativo do Android Wear no seu aparelho. Como elas estão em fase de testes (Developer Preview), devemos nos tornar testadores desses aplicativos. Para tal, siga os passos descritos nesse link, que basicamente permitirá que você se torne um tester da versão developer preview desses aplicativos.
2) Ainda no link acima, é informado que devemos abrir o Android SDK Manager para adicionarmos um novo repositório para podermos baixar o SDK Tools 23 e o Platform Tools 20.
3) Precisaremos também do Android Studio 0.8.1 para criar nossos aplicativos wearable. Ele disponível nesse link.
4) Quando tudo estiver pronto, abra o AVD Manager e crie um novo AVD. Conforme podemos observar na figura abaixo, no campo Device temos a opção Android Wear Square e Android Wear Round que representam a tela do relógio que pode ser quadrada ou redonda respectivamente. O comando de voz presente no dispositivo real não está disponível no emulador, então devemos deixar o campo "Hardware keyboard present" habilitado. Preencha os demais campos conforme a figura e depois clique em Ok.
5) Configurado o emulador, mande executar e você deve ter algo como a figura abaixo.
6) Agora abra o terminal e digite o seguinte comando na pasta ANDROID_SDK/platform-tools.
 adb -d forward tcp:5601 tcp:5601
Esse comando deve ser feito para permitir a conexão entre o seu smartphone/tablet e o emulador do wear.
7) Agora abra o aplicativo do Android Wear, clique no menu e selecione a opção Parear com novo wearable.
Será exibida uma tela similar a abaixo. Clique em Next (seta azul) para continuar.

Clique na engrenagem e selecione "Parear com emulador".
Se tudo correr bem, aparecerá a tela inicial com o título "Emulador Conectado".

Um teste simples
Apenas para confirmar se está tudo funcionando, vou mandar um email para mim mesmo. Isso fará com que uma notificação seja disparada no smartphone/tablet. Se estiver tudo ok, a mensagem também chegará no emulador. Conforme podemos ver na imagem abaixo.
Ao tocar na notificação ela ocupará a tela toda e poderemos vê-la melhor, inclusive podendo fazer scroll. Ao deslizar para a esquerda, podemos ver mais opções como excluir, responder e abrir no smartphone.
Se escolhermos a opção "Responder", podemos enviar um email de resposta apenas falando o seu conteúdo. Ao selecionarmos essa opção a tela abaixo será exibida.
No emulador, temos que digitar o texto de resposta, mas no relógio real, apenas falamos, o reconhecimento de voz é feito e o email será enviado.
No próximo post vou mostrar como fazer isso na sua aplicação! \o/

Qualquer dúvida, deixem seus comentários.

4br4ç05,
nglauber

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

segunda-feira, 30 de junho de 2014

Google I/O 2014

Olá povo,

No último dia 21/06 viajei para San Francisco para o meu primeiro Google I/O, conferência anual do Google. O evento aconteceu nos dias 25 e 26/06, e nesse post vou contar um pouquinho de como foi a viagem, pois todas as palestras podem ser vistas aqui ;)
Peguei um vôo da American Airlines de Recife para Miami (6 horas), e de Miami para San Francisco (mais 6 horas). Chegando em SF, fui recepcionado pelos meus estimados colegas Neto Marin e José Papo, que me levaram para conhecer o Pier 39, um ponto turístico da cidade.
Almoçamos por lá e depois demos uma volta pela cidade de carro. Depois eles me deixaram na casa onde fiquei hospedado (ótima por sinal) que fica a 15 minutos do centro. Dividi a casa com mais dois colegas: Alexandre Tarifa e Paulo Fernandes.
Na segunda-feira (23/06), fomos conhecer o Google, e foi simplesmente fantástico com vários prédios bacanas pra caramba. Mas minha principal meta era: tirar fotos no prédio onde ficam as estátuas do Android. Missão cumprida! :)


Assisti a vitória da seleção brasileira por 4x1 sobre Camarões no refeitório do Google, onde tinham vários brasileiros torcendo pela nossa seleção. Foi massa! :) Em seguida conheci outros prédios do Google Plex.
Lá dentro tem uma loja que vende camisas, bonecos, casacos com estampas das coisas do Google. Aí lascou! Comprei um monte :)
Depois do passeio no Google, fui conhecer um pouquinho do centro de SF. Uma coisa curiosa (e boa ao meu ver) é que as 20:00 ainda está claro, só começa a escurecer entre 20:30 e 21:00 :)
Jantei na Cheesecake Factory (infelizmente Penny não trabalha lá) e além de a comida ser excelente (e não tão cara) a vista de lá é bem bacana.
Terça-feira foi o dia de fazer o checkin no local do evento o Moscone Center West que estava vestido para o Google I/O.

Fiz a confirmação da minha presença e ganhei aquele kit básico de evento (crachá, camisa e garrafinha). Em seguida, fui para uma festa exclusiva para os GDEs onde conheci outros GDEs do resto mundo. Depois de algumas horas, fui pra casa pra descansar e me preparar para o primeiro dia do evento.

Acordei cedo na quarta-feira preparado para enfrentar a maratona de palestras que estava por vir. Peguei uma fila que deu a volta no quarteirão e perdi os 20 primeiros minutos do keynote de abertura (fiquei puto, porque GDE não precisava pegar essa fila) mas tudo bem, assisti quando cheguei em casa.
No keynote de abertura, os principais tópicos do Android foram:
- Android L Developer Preview que ficará no lugar do KitKat;
- Android Wear, o Android para dispositivos vestíveis, em especial, relógios e o glass;
- Android Auto, distribuição da plataforma para carros;
- Android TV, mais uma tentativa do Google em emplacar nas smartTVs.
Como é de costume o Google dá um "presentinho" a todos os participantes do I/O, e esse ano o participantes poderiam escolher entre o LG G watch ou Samsung Gear Live. Eu escolhi o segundo, (aos assaltantes de plantão, digo logo que não vou usa-lo :) A promessa é que depois (não sei quando) cada participante receberá também o Moto 360 (ficarei na torcida).
Uma coisa que foi impressionante pra mim foi o telão e a quantidade de pessoas (eu ouvi algo em torno de 6 mil).

Assisti palestras a tarde toda, e no final do primeiro dia, teve uma festinha bem legal. E o que é mais bacana nesse tipo de evento são as pessoas que você conhece. Conversei com um ex-gerente do NetFlix, com um TL do Hotel Urbano, uma designer do LinkedIn...
O segundo dia foi mais uma maratona de palestras, mas o que mais se falava era no novo visual/tema do Android: o Material. Muito bonito e consistente, ele foca muito em animações e promete trazer várias APIs (além do framework de animação existente desde o Honeycomb) para facilitar esse trabalho.

Um outro assunto recorrente eram os wearables, mais especificamente os relógios. Penso que o Google está investindo pesado e eu acho que a moda dos smartwatches vai mesmo pegar. Eles funcionam muito bem integrados com o smartphone, e inclusive o SDK já está disponível para download. Eu baixei o Android Studio 0.8 e já comecei a brincar com ele (já fiz até um app pro meu relógio :)

Ia esquecendo que não resisti e dei uma "tietada" em dois caras que eu sou muito fã: o Reto Meier e o Romain Guy. Se você mexe com Android e não conhece esses caras, bem... deveria conhecer :)
Bem pessoal, é isso. Quis resumir nesse post a história do meu primeiro Google I/O. Se vocês tiverem dúvidas sobre a viagem ou sobre o que aconteceu no evento, deixem seus comentários que eu vou editando aqui.

4br4ç05,
nglauber