Oficina Sesc Android - V1

67
{

description

Oficina SESC Android - Ago/2012

Transcript of Oficina Sesc Android - V1

Page 1: Oficina Sesc Android - V1

{

Page 2: Oficina Sesc Android - V1

Agenda

O que é Android ?

História do Android

Outros Sistemas

O limite é a imaginação

Page 3: Oficina Sesc Android - V1

O que é Android ?

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

É desenvolvido pela Open Handset Alliance, liderado pelo Google

Page 4: Oficina Sesc Android - V1

2005

2006

2007

2008

2010

2011

2012

Google acredita em uma pequena empresa chamada Android Inc., que tinha um projeto

de criar um sistema operacional para celulares baseado em linux.

Google comprou a empresa

Notícias da BBC e WallStreet dizem que Google está entrando no mercado restrito

de celulares.

Começaram boatos de que Google estava fabricando um celular.

Surge o consórcio Open Handset Alliance, formado por 47 empresas.

O objetivo é definir padrões para um sistema aberto, sem que os fabricantes tenham que pagar

licensas.Google é o líder deste consórcio e oferece o

Android como sistema operacional.

A empresa HTC lança o primeiro celular com Android: o HTC Dream

Outros fabricantes lançam modelos com android. Isto faz alcançar a marca de 43% dos celulares

vendidos nos Estados Unidos, com 362.000 ativações por dia.

São lançados os primeiros tablets com Android.

Android alcança a marca de 700.000 ativações por dia e projeta uma marca de aumento de 250% ao

ano.58%

30%

6% 5%

Android IOS Symbian Windows phone

Android se torna o líder em vendas pelo mundo, com 59%.

Fonte: http://en.wikipedia.org/wiki/Mobile_operating_system#Mobile_OS_comparison

História

Page 5: Oficina Sesc Android - V1

Novidades android

Page 6: Oficina Sesc Android - V1

Gravar e reproduzir vídeos

Ouvir rádio

Acessar sites na internet

Calcular com calculadora científica

Reproduzir MP3

Guardar arquivos via USB

Tirar fotos usando flash

Dirigir com GPS e mapas

Gravar sons

Ler PDF e Documentos

Jogar video-game

Receber e enviar mensagens SMS

Fazer e receber ligações

O que é possível fazer com um smartphone ?

Page 7: Oficina Sesc Android - V1

1982 2012

O Futuro é agora

Page 8: Oficina Sesc Android - V1

500.000Os equipamentos são substituídos por

aplicativos

Page 9: Oficina Sesc Android - V1

JavaCC♯C++Objective-CPHPVisual BasicPythonPerlJavaScriptDelphi PascalRubyLispTransact-SQLPascalVisual Basic .NETPL/SQLLogoAdaR

20 linguagens de programação mais populares

Fonte: http://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o

Para criar uma aplicação é necessário conhecer

uma linguagem de programação

Page 10: Oficina Sesc Android - V1

SISTEMA OPERACIONAL LINGUAGEM DE PROGRAMAÇÃO

Page 11: Oficina Sesc Android - V1

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

dedicação.

Sistemas operacionais e linguagens de programação.

Page 12: Oficina Sesc Android - V1

Agenda

Ambiente de desevolvimento

princípios

Hello world

Componentes visuais

Page 13: Oficina Sesc Android - V1

Ambiente de desevolvimento

Todo o ambiente de desenvolvimento é open-source

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

Eclipse: http://www.eclipse.org

Page 14: Oficina Sesc Android - V1

Activity

Android possui alguns conceitos interessantes em sua arquitetura

Activity

Service

Content Provider

Broadcast Receiver

Intent

Page 15: Oficina Sesc Android - V1

Activity

Para testar os conceitos a seguir, vamos criar uma nova aplicação

Page 16: Oficina Sesc Android - V1

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

XML

public class MainActivity extends Activity {

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

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }

Classe JAVA

1º Conceito: Activity

Cada tela individual é uma Activity.

Usuários conseguem executar ações

interagindo através de componentes visuais em uma

activity.

Page 17: Oficina Sesc Android - V1

Null

Ciclo de vida da activity

princípios

Background

onCreate()

onStart() onPause() onStop()

onDestroy()

onRestart()

onResume()

Page 18: Oficina Sesc Android - V1

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)

Page 19: Oficina Sesc Android - V1

Activity

<resources>

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

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

Tela para ajudar a inserir uma nova string

res/values/strings.xml

Page 20: Oficina Sesc Android - V1

Activity

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

Page 21: Oficina Sesc Android - V1

Activity

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

botao (Button)findViewByIdR.id.Button btProcessar= ( );

…ProgressDialog dialogo;Handler handler;…

Page 22: Oficina Sesc Android - V1

Activity

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

botao (Button)findViewByIdR.id.Button btProcessar= ( );

botao.setOnClickListener(this);

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

@Overridepublic void onClick(View arg0) {

}

… Activity implements OnClickListener{

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

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

Page 23: Oficina Sesc Android - V1

Activity

Forma errada de processar e executar métodos

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

Simulando um processamento pesado

Chame o método processar() no método

onClick() http://queninguemle.blogspot.com.br/

Page 24: Oficina Sesc Android - V1

Runnable contar = new Runnable(){@Overridepublic void run() {

processar();}

};Thread paralelo = new Thread(contar);paralelo.start();

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

dialogo = ProgressDialog.show(Tela1Activity.this, "Aguarde", "Processando");

Page 25: Oficina Sesc Android - V1

Intent Intenção

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

2º Conceito: Intent

Page 26: Oficina Sesc Android - V1

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

Intent

Intent

AndroidManifest.xml

Page 27: Oficina Sesc Android - V1

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 !

Page 28: Oficina Sesc Android - V1

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/

content://com.android.contacts/contacts/1

content://media/external/images/media

ContactsContract.Contacts.CONTENT_URI

Page 29: Oficina Sesc Android - V1

3º Content Provider

Provedor de conteúdoprivate 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);

}

}

}

Page 30: Oficina Sesc Android - V1

Sua aplicação vive sozinha ?

Comunicação

Interação

Informações

Live Streaming

Senão …

Page 31: Oficina Sesc Android - V1

Comunicação entre aplicações

Webservices REST

{ “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)" }}

Chave

Valor

JSON+JavaScript Object Notation

Page 32: Oficina Sesc Android - V1

princípios

Webservice

Http

JSON

Page 33: Oficina Sesc Android - V1

Conectando a apicação

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

https://api.foursquare.com/v2/users/1/friend

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

Ex.:

Page 34: Oficina Sesc Android - V1

Conectando a apicação

Page 35: Oficina Sesc Android - V1

Conectando a apicação

Page 36: Oficina Sesc Android - V1

Conectando a apicação

Page 37: Oficina Sesc Android - V1

Conectando a apicação

Page 38: Oficina Sesc Android - V1

Conectando a apicação

Page 39: Oficina Sesc Android - V1

Hora de programar

Page 40: Oficina Sesc Android - V1

Google android add-ins

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

Page 41: Oficina Sesc Android - V1

Google android add-ins

Google MAPs

Google Cloud Messaging

Google Play

USB Open Accessory

Google Analytics

Page 42: Oficina Sesc Android - V1

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

Page 43: Oficina Sesc Android - V1

Google android add-ins

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

Google APIs

Page 44: Oficina Sesc Android - V1

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 !

Page 45: Oficina Sesc Android - V1

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

Android AVD Manager -> New -> GoogleAPIs (Google Inc.)

Passos para ter sucesso com mapas

Criando o emulador

Page 46: Oficina Sesc Android - V1

Vamos criar um novo projeto

New -> Android Application Project

Passos para ter sucesso com mapas

Crie o novo projeto

Page 47: Oficina Sesc Android - V1

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

Passos para ter sucesso com mapas

Adicione permissões no AndroidManifest.xml

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

Page 48: Oficina Sesc Android - V1

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

</RelativeLayout>

Page 49: Oficina Sesc Android - V1

Passos para ter sucesso com mapas

Faça a Activity herdar de MapActivity

… TelaMapaActivity extends MapActivity {. . .

@Overrideprotected boolean isRouteDisplayed() {

// TODO Auto-generated method stubreturn false;

}

}

Page 50: Oficina Sesc Android - V1

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

Page 51: Oficina Sesc Android - V1

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>\.android\debug.keystore

Windows XP: C:\Documents and Settings\<user>\.android\debug.keystore

Linux: ˜/.android/debug.keystore

Linux: no terminal

cd .android

Page 52: Oficina Sesc Android - V1

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

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

Insira a senha: android

Page 53: Oficina Sesc Android - V1

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

Page 54: Oficina Sesc Android - V1

oficinasescandroid

oficin@sesC

Page 55: Oficina Sesc Android - V1

Passos para ter sucesso com mapas

Rode a aplicação novamente

Page 56: Oficina Sesc Android - V1

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

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

Page 57: Oficina Sesc Android - V1

Controlando o mapa

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

mapa = (MapView) findViewById(R.id.mapa);mapa.setSatellite(true);mapa.setBuiltInZoomControls(true);

MapView mapa;MapController controlador;GeoPoint ponto;

… extends MapActivity {

… setContentView(R.layout.tela_mapa);

controlador = mapa.getController();controlador.setZoom(17);

Page 58: Oficina Sesc Android - V1

Controlando o mapa

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

controlador.setZoom(17);final MyLocationOverlay meuponto = new MyLocationOverlay(this, mapa);

mapa.getOverlays().add(meuponto);

meuponto.runOnFirstFix(new Runnable(){ @Override public void run() { ponto = meuponto.getMyLocation(); controlador.animateTo(ponto); }

});

meuponto.enableCompass();meuponto.enableMyLocation();

Page 59: Oficina Sesc Android - V1

Testando a minha localização

Para enviar o sinal do GPS, utilize o Emulator Control

-46,547225

-23,6539964

Longitude

Latitude

Page 60: Oficina Sesc Android - V1

Movimentando o mapa

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

…extends MapActivity

LocationManager gerenciador;

GeoPoint ponto;

implements LocationListener{

gerenciador = (LocationManager)getSystemService(LOCATION_SERVICE);

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

controlador.animateTo(ponto); }});

. . .

Você será a obrigado a ter alguns métodos

Page 61: Oficina Sesc Android - V1

@Overridepublic 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);}

Basta atualizar o ponto, e centralizar no ponto encontrado !

Movimentando o mapa

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

Page 62: Oficina Sesc Android - V1

class MeuMarcador extends ItemizedOverlay{

Precisamos customizar um ponto para adicionar no mapa.

Adicionando pontos no mapa

public MeuMarcador(Drawable defaultMarker){ super(boundCenterBottom(defaultMarker));

populate(); }

public void adicionarPonto(OverlayItem ponto){ items.add(ponto); populate();}

}

ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();

}

Page 63: Oficina Sesc Android - V1

. . .

Precisamos customizar um ponto para adicionar no mapa.

Adicionando pontos no mapa

createItem => return items.get(i);

size => return items.size();

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

Toast.makeText(TelaMapaActivity.this, item.getSnippet(), Toast.LENGTH_LONG).show(); return super.onTap(index);}

Page 64: Oficina Sesc Android - V1

Precisamos customizar um ponto para adicionar no mapa.

Adicionando pontos 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);

. . .

Page 65: Oficina Sesc Android - V1

Aplausos para a nossa primeira aplicação !

Page 66: Oficina Sesc Android - V1

Como são compiladas as apps. ?

.java.clas

s.dex

imagens

arquivos

.apk

Instalamos a aplicação .apk nos dispositivos

Page 67: Oficina Sesc Android - V1

{Obrigado pela presença

[email protected]