{
Agenda

O que é Android ?

História do Android

Outros Sistemas

O limite é a imaginação
O que é Android ?




Android é um sistema operacional baseado em linux para dispositivos móveis.

     É desenvolvido pela Open Handset Alliance, liderado pelo Google
História

                                                          6%                  5%
    Surge o consórciotorna Handset Alliance, formado por
      Android se Open o
    Google acredita emprimeiros tablets com Android.
                         47 uma pequena empresa
          São lançados os empresas.
      líder em vendas pelo
   Notícias da BBC e WallStreet dizem que Google
   chamada é definir padrões para um sistema aberto, sem
   O objetivo Android mercado restrito de celulares.
                        Inc., que tinha um projeto de
   está entrando no lançam modelos com android. Isto faz
     Outros fabricantes 59%.
      mundo, com o primeiro pagar licensas.
    criar um alcança a operacionalcelular celulares dia e
    AAndroid sistema marca de 700.000 ativações por o
      empresa fabricantes tenham quepara com Android:
        que os HTC lança                 30%
      alcançar a marca de 43% dos celulares vendidos nos
         projeta uma marca de Dream de 250% ao ano.
                          HTC aumento
     Google é o líder deste consórcio e oferece o Android 59%
                   baseado em linux.
         Estados Unidos, com 362.000 ativações por dia.
      Começaram boatos de operacional. estava
                  como sistema que Google
                fabricando um celular.
              Google comprou a empresa
                            Android         IOS        Symbian           Windows phone
                     Fonte: http://en.wikipedia.org/wiki/Mobile_operating_system#Mobile_OS_comparison




       2005          2007                       2010                        2012


              2006                2008                        2011
Novidades android
O que é possível fazer com um smartphone ?




 Guardar arquivos via USB                    Acessar sites na internet

 Ouvir rádio                                 Jogar video-game

 Tirar fotos usando flash                    Ler PDF e Documentos

 Gravar e reproduzir vídeos                  Receber e enviar mensagens SMS

 Calcular com calculadora científica Dirigir com GPS e mapas

 Reproduzir MP3                              Fazer e receber ligações

 Gravar sons
O Futuro é agora




                   1982   2012
Os equipamentos são substituídos por
           aplicativos
Para criar uma aplicação é                            Java
                    necessário conhecer uma                              C
                                                                         C♯
                  linguagem de programação                               C++
                                                                         Objective-C
                                                                         PHP
                                                                         Visual Basic
                                                                         Python
20 linguagens de programação mais populares                              Perl
                                                                         JavaScript
                                                                         Delphi
                                                                         Pascal
                                                                         Ruby
                                                                         Lisp
                                                                         Transact-SQL
                                                                         Pascal
                                                                         Visual Basic .NET
                                                                         PL/SQL
                                                                         Logo
                                                                         Ada
Fonte: http://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o   R
Sistemas operacionais e
     linguagens de programação.




   Qualquer uma das linguagens de
programação requer estudo e dedicação.
Agenda

Ambiente de desevolvimento

princípios

Hello world

Componentes visuais
Ambiente de desevolvimento




                Todo o ambiente de desenvolvimento é open-source


 Eclipse: http://www.eclipse.org




                                    Android SDK: http://developer.android.com/sdk
Activity


           Android possui alguns conceitos
           interessantes em sua arquitetura

     Activity                         Intent
     Service
     Content Provider
     Broadcast Receiver
Activity




    Para testar os conceitos a seguir, vamos criar
                 uma nova aplicação
1º Conceito: Activity                                                                        XML
                         <RelativeLayout 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" >
                           <TextView
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_centerHorizontal="true"
                             android:layout_centerVertical="true"
                             android:padding="@dimen/padding_medium"
                             android:text="@string/hello_world"
                             tools:context=".MainActivity" />
                         </RelativeLayout>

                                                                                        Classe JAVA
                         public class MainActivity extends Activity {
Cada tela individual é       @Override
uma Activity. Usuários       public void onCreate(Bundle savedInstanceState) {
                               super.onCreate(savedInstanceState);
 conseguem executar            setContentView(R.layout.activity_main);
                             }
   ações interagindo
      através de             @Override
                             public boolean onCreateOptionsMenu(Menu menu) {
 componentes visuais           getMenuInflater().inflate(R.menu.activity_main, menu);
                               return true;
    em uma activity.         }
                         }
princípios
                                                         Background
    Ciclo de vida da activity



               onRestart()




onCreate()       onStart()      onResume()   onPause()    onStop()




                                                         onDestroy()



                                                            Null
Activity

           Precisamos atribuir identificadores para os componentes da tela




                                          Dicas:

                                          • Use padrões para nomear componentes
                                          • Use nomes simples
                                          • Adicione ao nome do componente o tipo

                                          (ex: “btProcessar”, nome para o botão
                                          processar)
Activity

   Para facilitar a internacionalização da aplicação, é recomendado usar strings.xml




                                      Tela para ajudar a inserir uma nova string




                               <resources>                       res/values/strings.xml
                                 <string name="app_name">Ajuste9Digitos</string>
                                 <string name="hello_world">Hello world!</string>
                                 <string name="menu_settings">Settings</string>
                                 <string name="title_activity_tela1">Tela 1</string>
                                 <string name="botao">Processar</string>
                                 <string name="title_activity_tela2">Tela 2</string>
                                 <string name="clique">Clique no botao</string>
                                 <string name="ir_para_contatos">Ir para
                               contatos</string>

                               </resources>
Activity


           Para adicionar funções ao botão, precisamos programar
Activity


             Para adicionar funções ao botão, precisamos programar
 …
 ProgressDialog dialogo;
 Handler handler;
 …



 …
Button botao =(Button)findViewById(R.id.btProcessar);
 …
Activity


             Para adicionar funções ao botão, precisamos programar

Button botao =(Button)findViewById(R.id.btProcessar);
botao.setOnClickListener(this);

Faça a Activity implementar o Listener do Click (OnClickListener)

   … Activity implements OnClickListener{

 Você será obrigado a ter o método onClick


   @Override
   public void onClick(View arg0) {

       Toast.makeText(Tela1Activity.this, “Click”, 1000).show();

   }
Activity
 Forma errada de processar e executar métodos

                                 Simulando um processamento pesado
  private void processar(){
      int contador = 1;
      while(contador < 150000){
            Log.i("Tela1", "Estou no " + contador);
            contador++;
      }
  }




Chame o método processar()
   no método onClick()
                                            http://queninguemle.blogspot.com.br/
Activity
 Forma correta de processar e executar métodos
  private void processar(){
            int contador = 0;
            while(contador < 100000){
                       contador++;
                       Log.i("Tela1", "Estou no " + contador);
            }

  }

               Chame o método processar() em uma Thread
Runnable contar = new Runnable(){
     @Override
     public void run() {
           processar();
     }
};
Thread paralelo = new Thread(contar);
paralelo.start();
 dialogo = ProgressDialog.show(Tela1Activity.this, "Aguarde", "Processando");
2º Conceito: Intent


 Intent   Intenção



   Intent é uma descrição abstrata de uma
        operação que será executada
Intent

Para navegar entre activities, precisamos informar a nossa intenção




         Intent



                     AndroidManifest.xml
3º Content Provider
Provedor de conteúdo

 Android permite armazenar informações de diversas maneiras.


         Banco de dados
         Arquivos de texto
         Preferencias de sistema

                        Porém, geralmente as informações ficam
                        salvas dentro do pacote da aplicação.

                        Somente a aplicação pode acessar !
3º Content Provider
Provedor de conteúdo

       O Conceito de “Content Provider” permite que essas
                  informações sejam públicas

Para utilizar o content provider, é necessário utilizar URI para identificar a informação

                   Uniform Resource Identifier (Identificador Uniforme de Recursos)

 content://com.android.contacts/contacts/
              ContactsContract.Contacts.CONTENT_URI


 content://com.android.contacts/contacts/1
 content://media/external/images/media
3º Content Provider
    Provedor de conteúdo
private void listarContatos(){
   Uri contatos = ContactsContract.Contacts.CONTENT_URI;

    ContentResolver content = getContentResolver();

    Cursor cursor = content.query(contatos, null, null, null, null);

    while(cursor.moveToNext()){

         for(int i=0; i < cursor.getColumnCount(); i++){

             String info = cursor.getColumnName(i) + " = " + cursor.getString(i);
             Log.i("Tela1",info);

         }

    }

}
Sua aplicação vive sozinha ?


 Comunicação                   Senão …

 Interação

 Informações

 Live Streaming
Comunicação entre aplicações

    Webservices
                    REST + JSON
                                       JavaScript Object Notation

     Chave
                               Valor

{
    “pergunta”:{
     "numero_pergunta":"3",
     "pergunta":"Quantas vezes o Brasil foi campeao da copa ?",
     "3":"6 vezes (hexa)",
     "2":"5 vezes (penta)",
     "1":"4 vezes (tetra)"
    }
}
princípios



             Http


                    Webservice




             JSON
Conectando a apicação




  Para se conectar á redes sociais, é necessário conhecer a API


 Ex.:

 https://userstream.twitter.com/2/user.json

 https://api.foursquare.com/v2/users/1/friend
Conectando a apicação
Conectando a apicação
Conectando a apicação
Conectando a apicação
Conectando a apicação
Hora de programar
Google android add-ins




       Para facilitar o desenvolvimento e promover
     idéias inovadoras, Google oferece um conjunto
              especial de APIs para Android
Google android add-ins




                                       USB Open Accessory
   Google MAPs



                    Google Cloud Messaging




     Google Play                        Google Analytics
Google android add-ins




 Google Maps API fornece um poderoso ambiente
 para adicionar funcionalidades de mapas em sua
 aplicação



                            Possui uma variedade de classes para renderizar
                            mapas, além de diversas opções de visualizar e
                            controlar mapas




  A classe principal é chamada de MapView, responsável
  por renderizar, reconhecer gestos para fazer zoom, e
  fazer requisições adicionais ao servidor de mapas
Google android add-ins




 Para começar a usar, é necessário baixar o pacote Google
 APIs no SDK Manager do Android Plugin




    Google
    APIs
Passos para ter sucesso com mapas



 Crie um emulador com suporte á Google APIs e GPS

 Crie um novo projeto (Android Application Project)

 Adicione as permissões no AndroidManifest.xml

 Arranque o Hello World da tela, e coloque no lugar um MapView

 Altere a classe para herdar de MapActivity, e não mais Activity

 Gere a chave GoogleMaps (não é tão de graça assim)

 Altere o XML, insira a chave que recebeu do Google

 Rode a aplicação e parta para o abraço !
Passos para ter sucesso com mapas


  Criando o emulador




Vamos criar um novo emulador, informando que
utilizaremos a GoogleAPI.



Android AVD Manager -> New -> GoogleAPIs (Google Inc.)
Passos para ter sucesso com mapas


  Crie o novo projeto




                   Vamos criar um novo projeto



New -> Android Application Project
Passos para ter sucesso com mapas


  Adicione permissões no AndroidManifest.xml




         Precisamos alterar o AndroidManifest.xml
                 Tenha cuidado ao digitar em meio as tags.

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>




Dentro de application

<uses-library android:name="com.google.android.maps"/>
Passos para ter sucesso com mapas


Arranque o Hello World da tela (tela_mapa.xml) e insira o MapView

<RelativeLayout
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" >

     <com.google.android.maps.MapView
          android:id="@+id/mapa"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:enabled="true"
          android:clickable="true"
          android:apiKey="CHAVE_GOOGLE_MAPS"
     />
Passos para ter sucesso com mapas


Faça a Activity herdar de MapActivity



  …     TelaMapaActivity extends MapActivity            {
                . . .

            @Override
            protected boolean isRouteDisplayed() {
                   // TODO Auto-generated method stub
                   return false;
            }



    }
Passos para ter sucesso com mapas


Rode a aplicação (para gerar o arquivo debug.keystore)



Rode a aplicação agora, e receba um erro grátis !




java.io.IOException: Server returned: 3
Passos para ter sucesso com mapas


Gere a chave GoogleMaps (não é tão de graça assim)

  Precisamos gerar a chave para utilizar o mapa



Windows Vista: C:Users<user>.androiddebug.keystore

Windows XP: C:Documents and Settings<user>.androiddebug.keystore

Linux: ˜/.android/debug.keystore



  Linux: no terminal
                 cd .android
Passos para ter sucesso com mapas


Gere a chave GoogleMaps (não é tão de graça assim)



No terminal, digite:


keytool –list –keystore debug.keystore

Insira a senha: android




  Your keystore contains 1 entry

  androiddebugkey, Jul 17, 2012, PrivateKeyEntry,
  Certificate fingerprint (MD5): 51:15:A4:15:DB:23:9E:C6:E2:77:04:3B:37:CA:53:70
Passos para ter sucesso com mapas


Gere a chave GoogleMaps (não é tão de graça assim)


   https://developers.google.com/android/maps-api-signup
oficinasescandroid

oficin@sesC
Passos para ter sucesso com mapas


Rode a aplicação novamente
Passos para ter sucesso com mapas



 Crie um emulador com suporte á Google APIs e GPS

 Crie um novo projeto (Android Application Project)

 Adicione as permissões no AndroidManifest.xml

 Arranque o Hello World da tela, e coloque no lugar um MapView

 Altere a classe para herdar de MapActivity, e não mais Activity

 Gere a chave GoogleMaps (não é tão de graça assim)

 Altere o XML, insira a chave que recebeu do Google

 Rode a aplicação e parta para o abraço !
Controlando o mapa

 É possível controlar o mapa através de programação


                             … extends MapActivity {
   MapView mapa;
   MapController controlador;
   GeoPoint ponto;

   … setContentView(R.layout.tela_mapa);

  mapa = (MapView) findViewById(R.id.mapa);
  mapa.setSatellite(true);
  mapa.setBuiltInZoomControls(true);
  controlador = mapa.getController();
  controlador.setZoom(17);
Controlando o mapa

   É possível controlar o mapa através de programação



controlador.setZoom(17);
final MyLocationOverlay meuponto         = new
MyLocationOverlay(this, mapa);
meuponto.enableCompass();
meuponto.enableMyLocation();
mapa.getOverlays().add(meuponto);
meuponto.runOnFirstFix(new Runnable(){
     @Override
     public void run() {
         ponto = meuponto.getMyLocation();
         controlador.animateTo(ponto);
     }
});
Testando a minha localização

Para enviar o sinal do GPS, utilize o Emulator Control




                                         Longitude   -46,547225
                                         Latitude    -23,6539964
Movimentando o mapa



 É necessário um Listener para que o mapa seja atualizado


 …extends MapActivity implements LocationListener{
                                          Você será a obrigado a ter alguns métodos
         GeoPoint ponto;
         LocationManager gerenciador;
         ...

      controlador.animateTo(ponto);
   }
});
gerenciador =
(LocationManager)getSystemService(LOCATION_SERVICE);

gerenciador.requestLocationUpdates(LocationManager.GPS_PROVIDER
, 1000, 1, this);
Movimentando o mapa


     Basta atualizar o ponto, e centralizar no ponto encontrado !



       GeoPoint mede latitude e longitude em micrograus, e o
       GPS retorna em graus. Por isso, tem que converter !


@Override
public void onLocationChanged(Location location) {

      Toast.makeText(this, “Ponto encontrado", Toast.LENGTH_LONG).show();

       ponto = new GeoPoint(
          (int) (location.getLatitude() * 1E6),
          (int) (location.getLongitude()* 1E6)
       );

      controlador.animateTo(ponto);
}
Adicionando pontos no mapa
     Precisamos customizar um ponto para adicionar no mapa.

    class MeuMarcador extends ItemizedOverlay{
    ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
        public MeuMarcador(Drawable defaultMarker){
             super(boundCenterBottom(defaultMarker));
             populate();
        }
        public void adicionarPonto(OverlayItem ponto){
              items.add(ponto);
              populate();
        }
        …
    }
}
Adicionando pontos no mapa
      Precisamos customizar um ponto para adicionar no mapa.

    . . .
     createItem        =>        return items.get(i);
     size              =>        return items.size();

@Override
protected boolean onTap(int index) {
  OverlayItem item = items.get(index);

     Toast.makeText(TelaMapaActivity.this, item.getSnippet(),
             Toast.LENGTH_LONG).show();

     return super.onTap(index);
}
Adicionando pontos no mapa
   Precisamos customizar um ponto para adicionar no mapa.

 LocationManager gerenciadorLocal;
 MeuMarcador marcadores;


onLocationChanged ( . . . ) {
      . . .
controlador.animateTo(ponto);

OverlayItem item = new OverlayItem(ponto,
   "Ponto", location.toString());

marcadores.adicionarPonto(item);

mapa.getOverlays().add(marcadores);
Aplausos para a nossa primeira aplicação !
Como são compiladas as apps. ?




                                           imagens
.java   .class                .dex
                                           arquivos



                                   .apk

                      Instalamos a aplicação .apk nos dispositivos
odair.bonin@gmail.com




       { Obrigado pela presença

Oficina Sesc Android - V1

  • 1.
  • 2.
    Agenda O que éAndroid ? História do Android Outros Sistemas O limite é a imaginação
  • 3.
    O que éAndroid ? Android é um sistema operacional baseado em linux para dispositivos móveis. É desenvolvido pela Open Handset Alliance, liderado pelo Google
  • 4.
    História 6% 5% Surge o consórciotorna Handset Alliance, formado por Android se Open o Google acredita emprimeiros tablets com Android. 47 uma pequena empresa São lançados os empresas. líder em vendas pelo Notícias da BBC e WallStreet dizem que Google chamada é definir padrões para um sistema aberto, sem O objetivo Android mercado restrito de celulares. Inc., que tinha um projeto de está entrando no lançam modelos com android. Isto faz Outros fabricantes 59%. mundo, com o primeiro pagar licensas. criar um alcança a operacionalcelular celulares dia e AAndroid sistema marca de 700.000 ativações por o empresa fabricantes tenham quepara com Android: que os HTC lança 30% alcançar a marca de 43% dos celulares vendidos nos projeta uma marca de Dream de 250% ao ano. HTC aumento Google é o líder deste consórcio e oferece o Android 59% baseado em linux. Estados Unidos, com 362.000 ativações por dia. Começaram boatos de operacional. estava como sistema que Google fabricando um celular. Google comprou a empresa Android IOS Symbian Windows phone Fonte: http://en.wikipedia.org/wiki/Mobile_operating_system#Mobile_OS_comparison 2005 2007 2010 2012 2006 2008 2011
  • 5.
  • 6.
    O que épossível fazer com um smartphone ? Guardar arquivos via USB Acessar sites na internet Ouvir rádio Jogar video-game Tirar fotos usando flash Ler PDF e Documentos Gravar e reproduzir vídeos Receber e enviar mensagens SMS Calcular com calculadora científica Dirigir com GPS e mapas Reproduzir MP3 Fazer e receber ligações Gravar sons
  • 7.
    O Futuro éagora 1982 2012
  • 8.
    Os equipamentos sãosubstituídos por aplicativos
  • 9.
    Para criar umaaplicação é Java necessário conhecer uma C C♯ linguagem de programação C++ Objective-C PHP Visual Basic Python 20 linguagens de programação mais populares Perl JavaScript Delphi Pascal Ruby Lisp Transact-SQL Pascal Visual Basic .NET PL/SQL Logo Ada Fonte: http://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o R
  • 11.
    Sistemas operacionais e linguagens de programação. Qualquer uma das linguagens de programação requer estudo e dedicação.
  • 12.
  • 13.
    Ambiente de desevolvimento Todo o ambiente de desenvolvimento é open-source Eclipse: http://www.eclipse.org Android SDK: http://developer.android.com/sdk
  • 14.
    Activity Android possui alguns conceitos interessantes em sua arquitetura Activity Intent Service Content Provider Broadcast Receiver
  • 15.
    Activity Para testar os conceitos a seguir, vamos criar uma nova aplicação
  • 16.
    1º Conceito: Activity XML <RelativeLayout 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" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:padding="@dimen/padding_medium" android:text="@string/hello_world" tools:context=".MainActivity" /> </RelativeLayout> Classe JAVA public class MainActivity extends Activity { Cada tela individual é @Override uma Activity. Usuários public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); conseguem executar setContentView(R.layout.activity_main); } ações interagindo através de @Override public boolean onCreateOptionsMenu(Menu menu) { componentes visuais getMenuInflater().inflate(R.menu.activity_main, menu); return true; em uma activity. } }
  • 17.
    princípios Background Ciclo de vida da activity onRestart() onCreate() onStart() onResume() onPause() onStop() onDestroy() Null
  • 18.
    Activity Precisamos atribuir identificadores para os componentes da tela Dicas: • Use padrões para nomear componentes • Use nomes simples • Adicione ao nome do componente o tipo (ex: “btProcessar”, nome para o botão processar)
  • 19.
    Activity Para facilitar a internacionalização da aplicação, é recomendado usar strings.xml Tela para ajudar a inserir uma nova string <resources> res/values/strings.xml <string name="app_name">Ajuste9Digitos</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_tela1">Tela 1</string> <string name="botao">Processar</string> <string name="title_activity_tela2">Tela 2</string> <string name="clique">Clique no botao</string> <string name="ir_para_contatos">Ir para contatos</string> </resources>
  • 20.
    Activity Para adicionar funções ao botão, precisamos programar
  • 21.
    Activity Para adicionar funções ao botão, precisamos programar … ProgressDialog dialogo; Handler handler; … … Button botao =(Button)findViewById(R.id.btProcessar); …
  • 22.
    Activity Para adicionar funções ao botão, precisamos programar Button botao =(Button)findViewById(R.id.btProcessar); botao.setOnClickListener(this); Faça a Activity implementar o Listener do Click (OnClickListener) … Activity implements OnClickListener{ Você será obrigado a ter o método onClick @Override public void onClick(View arg0) { Toast.makeText(Tela1Activity.this, “Click”, 1000).show(); }
  • 23.
    Activity Forma erradade processar e executar métodos Simulando um processamento pesado private void processar(){ int contador = 1; while(contador < 150000){ Log.i("Tela1", "Estou no " + contador); contador++; } } Chame o método processar() no método onClick() http://queninguemle.blogspot.com.br/
  • 24.
    Activity Forma corretade processar e executar métodos private void processar(){ int contador = 0; while(contador < 100000){ contador++; Log.i("Tela1", "Estou no " + contador); } } Chame o método processar() em uma Thread Runnable contar = new Runnable(){ @Override public void run() { processar(); } }; Thread paralelo = new Thread(contar); paralelo.start(); dialogo = ProgressDialog.show(Tela1Activity.this, "Aguarde", "Processando");
  • 25.
    2º Conceito: Intent Intent Intenção Intent é uma descrição abstrata de uma operação que será executada
  • 26.
    Intent Para navegar entreactivities, precisamos informar a nossa intenção Intent AndroidManifest.xml
  • 27.
    3º Content Provider Provedorde conteúdo Android permite armazenar informações de diversas maneiras. Banco de dados Arquivos de texto Preferencias de sistema Porém, geralmente as informações ficam salvas dentro do pacote da aplicação. Somente a aplicação pode acessar !
  • 28.
    3º Content Provider Provedorde conteúdo O Conceito de “Content Provider” permite que essas informações sejam públicas Para utilizar o content provider, é necessário utilizar URI para identificar a informação Uniform Resource Identifier (Identificador Uniforme de Recursos) content://com.android.contacts/contacts/ ContactsContract.Contacts.CONTENT_URI content://com.android.contacts/contacts/1 content://media/external/images/media
  • 29.
    3º Content Provider Provedor de conteúdo private void listarContatos(){ Uri contatos = ContactsContract.Contacts.CONTENT_URI; ContentResolver content = getContentResolver(); Cursor cursor = content.query(contatos, null, null, null, null); while(cursor.moveToNext()){ for(int i=0; i < cursor.getColumnCount(); i++){ String info = cursor.getColumnName(i) + " = " + cursor.getString(i); Log.i("Tela1",info); } } }
  • 30.
    Sua aplicação vivesozinha ? Comunicação Senão … Interação Informações Live Streaming
  • 31.
    Comunicação entre aplicações Webservices REST + JSON JavaScript Object Notation Chave Valor { “pergunta”:{ "numero_pergunta":"3", "pergunta":"Quantas vezes o Brasil foi campeao da copa ?", "3":"6 vezes (hexa)", "2":"5 vezes (penta)", "1":"4 vezes (tetra)" } }
  • 32.
    princípios Http Webservice JSON
  • 33.
    Conectando a apicação Para se conectar á redes sociais, é necessário conhecer a API Ex.: https://userstream.twitter.com/2/user.json https://api.foursquare.com/v2/users/1/friend
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
    Google android add-ins Para facilitar o desenvolvimento e promover idéias inovadoras, Google oferece um conjunto especial de APIs para Android
  • 41.
    Google android add-ins USB Open Accessory Google MAPs Google Cloud Messaging Google Play Google Analytics
  • 42.
    Google android add-ins Google Maps API fornece um poderoso ambiente para adicionar funcionalidades de mapas em sua aplicação Possui uma variedade de classes para renderizar mapas, além de diversas opções de visualizar e controlar mapas A classe principal é chamada de MapView, responsável por renderizar, reconhecer gestos para fazer zoom, e fazer requisições adicionais ao servidor de mapas
  • 43.
    Google android add-ins Para começar a usar, é necessário baixar o pacote Google APIs no SDK Manager do Android Plugin Google APIs
  • 44.
    Passos para tersucesso com mapas Crie um emulador com suporte á Google APIs e GPS Crie um novo projeto (Android Application Project) Adicione as permissões no AndroidManifest.xml Arranque o Hello World da tela, e coloque no lugar um MapView Altere a classe para herdar de MapActivity, e não mais Activity Gere a chave GoogleMaps (não é tão de graça assim) Altere o XML, insira a chave que recebeu do Google Rode a aplicação e parta para o abraço !
  • 45.
    Passos para tersucesso com mapas Criando o emulador Vamos criar um novo emulador, informando que utilizaremos a GoogleAPI. Android AVD Manager -> New -> GoogleAPIs (Google Inc.)
  • 46.
    Passos para tersucesso com mapas Crie o novo projeto Vamos criar um novo projeto New -> Android Application Project
  • 47.
    Passos para tersucesso com mapas Adicione permissões no AndroidManifest.xml Precisamos alterar o AndroidManifest.xml Tenha cuidado ao digitar em meio as tags. <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> Dentro de application <uses-library android:name="com.google.android.maps"/>
  • 48.
    Passos para tersucesso com mapas Arranque o Hello World da tela (tela_mapa.xml) e insira o MapView <RelativeLayout 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" > <com.google.android.maps.MapView android:id="@+id/mapa" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="CHAVE_GOOGLE_MAPS" />
  • 49.
    Passos para tersucesso com mapas Faça a Activity herdar de MapActivity … TelaMapaActivity extends MapActivity { . . . @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } }
  • 50.
    Passos para tersucesso com mapas Rode a aplicação (para gerar o arquivo debug.keystore) Rode a aplicação agora, e receba um erro grátis ! java.io.IOException: Server returned: 3
  • 51.
    Passos para tersucesso com mapas Gere a chave GoogleMaps (não é tão de graça assim) Precisamos gerar a chave para utilizar o mapa Windows Vista: C:Users<user>.androiddebug.keystore Windows XP: C:Documents and Settings<user>.androiddebug.keystore Linux: ˜/.android/debug.keystore Linux: no terminal cd .android
  • 52.
    Passos para tersucesso com mapas Gere a chave GoogleMaps (não é tão de graça assim) No terminal, digite: keytool –list –keystore debug.keystore Insira a senha: android Your keystore contains 1 entry androiddebugkey, Jul 17, 2012, PrivateKeyEntry, Certificate fingerprint (MD5): 51:15:A4:15:DB:23:9E:C6:E2:77:04:3B:37:CA:53:70
  • 53.
    Passos para tersucesso com mapas Gere a chave GoogleMaps (não é tão de graça assim) https://developers.google.com/android/maps-api-signup
  • 54.
  • 55.
    Passos para tersucesso com mapas Rode a aplicação novamente
  • 56.
    Passos para tersucesso com mapas Crie um emulador com suporte á Google APIs e GPS Crie um novo projeto (Android Application Project) Adicione as permissões no AndroidManifest.xml Arranque o Hello World da tela, e coloque no lugar um MapView Altere a classe para herdar de MapActivity, e não mais Activity Gere a chave GoogleMaps (não é tão de graça assim) Altere o XML, insira a chave que recebeu do Google Rode a aplicação e parta para o abraço !
  • 57.
    Controlando o mapa É possível controlar o mapa através de programação … extends MapActivity { MapView mapa; MapController controlador; GeoPoint ponto; … setContentView(R.layout.tela_mapa); mapa = (MapView) findViewById(R.id.mapa); mapa.setSatellite(true); mapa.setBuiltInZoomControls(true); controlador = mapa.getController(); controlador.setZoom(17);
  • 58.
    Controlando o mapa É possível controlar o mapa através de programação controlador.setZoom(17); final MyLocationOverlay meuponto = new MyLocationOverlay(this, mapa); meuponto.enableCompass(); meuponto.enableMyLocation(); mapa.getOverlays().add(meuponto); meuponto.runOnFirstFix(new Runnable(){ @Override public void run() { ponto = meuponto.getMyLocation(); controlador.animateTo(ponto); } });
  • 59.
    Testando a minhalocalização Para enviar o sinal do GPS, utilize o Emulator Control Longitude -46,547225 Latitude -23,6539964
  • 60.
    Movimentando o mapa É necessário um Listener para que o mapa seja atualizado …extends MapActivity implements LocationListener{ Você será a obrigado a ter alguns métodos GeoPoint ponto; LocationManager gerenciador; ... controlador.animateTo(ponto); } }); gerenciador = (LocationManager)getSystemService(LOCATION_SERVICE); gerenciador.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1000, 1, this);
  • 61.
    Movimentando o mapa Basta atualizar o ponto, e centralizar no ponto encontrado ! GeoPoint mede latitude e longitude em micrograus, e o GPS retorna em graus. Por isso, tem que converter ! @Override public void onLocationChanged(Location location) { Toast.makeText(this, “Ponto encontrado", Toast.LENGTH_LONG).show(); ponto = new GeoPoint( (int) (location.getLatitude() * 1E6), (int) (location.getLongitude()* 1E6) ); controlador.animateTo(ponto); }
  • 62.
    Adicionando pontos nomapa Precisamos customizar um ponto para adicionar no mapa. class MeuMarcador extends ItemizedOverlay{ ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); public MeuMarcador(Drawable defaultMarker){ super(boundCenterBottom(defaultMarker)); populate(); } public void adicionarPonto(OverlayItem ponto){ items.add(ponto); populate(); } … } }
  • 63.
    Adicionando pontos nomapa Precisamos customizar um ponto para adicionar no mapa. . . . createItem => return items.get(i); size => return items.size(); @Override protected boolean onTap(int index) { OverlayItem item = items.get(index); Toast.makeText(TelaMapaActivity.this, item.getSnippet(), Toast.LENGTH_LONG).show(); return super.onTap(index); }
  • 64.
    Adicionando pontos nomapa Precisamos customizar um ponto para adicionar no mapa. LocationManager gerenciadorLocal; MeuMarcador marcadores; onLocationChanged ( . . . ) { . . . controlador.animateTo(ponto); OverlayItem item = new OverlayItem(ponto, "Ponto", location.toString()); marcadores.adicionarPonto(item); mapa.getOverlays().add(marcadores);
  • 65.
    Aplausos para anossa primeira aplicação !
  • 66.
    Como são compiladasas apps. ? imagens .java .class .dex arquivos .apk Instalamos a aplicação .apk nos dispositivos
  • 67.
    odair.bonin@gmail.com { Obrigado pela presença