oficina sesc android - v1

Post on 03-Nov-2014

24 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

Oficina SESC Android - Ago/2012

TRANSCRIPT

{

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

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

Novidades android

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 ?

1982 2012

O Futuro é agora

500.000Os equipamentos são substituídos por

aplicativos

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

SISTEMA OPERACIONAL LINGUAGEM DE PROGRAMAÇÃO

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

dedicação.

Sistemas operacionais e linguagens de programação.

Agenda

Ambiente de desevolvimento

princípios

Hello world

Componentes visuais

Ambiente de desevolvimento

Todo o ambiente de desenvolvimento é open-source

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

Eclipse: http://www.eclipse.org

Activity

Android possui alguns conceitos interessantes em sua arquitetura

Activity

Service

Content Provider

Broadcast Receiver

Intent

Activity

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

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

Null

Ciclo de vida da activity

princípios

Background

onCreate()

onStart() onPause() onStop()

onDestroy()

onRestart()

onResume()

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

<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

Activity

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

Activity

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

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

…ProgressDialog dialogo;Handler handler;…

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();

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/

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");

Intent Intenção

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

2º Conceito: Intent

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

Intent

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/

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

content://media/external/images/media

ContactsContract.Contacts.CONTENT_URI

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

}

}

}

Sua aplicação vive sozinha ?

Comunicação

Interação

Informações

Live Streaming

Senão …

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

princípios

Webservice

Http

JSON

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

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

Google MAPs

Google Cloud Messaging

Google Play

USB Open Accessory

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 !

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

Vamos criar um novo projeto

New -> Android Application Project

Passos para ter sucesso com mapas

Crie o novo projeto

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

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>

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;

}

}

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

Windows XP: C:\Documents and Settings\<user>\.android\debug.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

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

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

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

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

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();

Testando a minha localização

Para enviar o sinal do GPS, utilize o Emulator Control

-46,547225

-23,6539964

Longitude

Latitude

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

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

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>();

}

. . .

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

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

. . .

Aplausos para a nossa primeira aplicação !

Como são compiladas as apps. ?

.java.clas

s.dex

imagens

arquivos

.apk

Instalamos a aplicação .apk nos dispositivos

{Obrigado pela presença

odair.bonin@gmail.com

top related