Upload
odair-bonin
View
26
Download
5
Embed Size (px)
DESCRIPTION
Oficina SESC Android - Ago/2012
Citation preview
{
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