[1] O documento descreve o sistema operacional Android, incluindo sua história, conceitos e ferramentas de desenvolvimento.
[2] Os principais conceitos abordados são Activity, Intent e Content Provider, que são componentes fundamentais da arquitetura do Android.
[3] O documento também discute como conectar aplicações Android a serviços como Google Maps e redes sociais através de APIs.
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
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
9. 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
10.
11. Sistemas operacionais e
linguagens de programação.
Qualquer uma das linguagens de
programação requer estudo e dedicação.
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 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/
24. 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");
25. 2º Conceito: Intent
Intent Intenção
Intent é uma descrição abstrata de uma
operação que será executada
26. Intent
Para navegar entre activities, precisamos informar a nossa intenção
Intent
AndroidManifest.xml
27. 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 !
28. 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
30. Sua aplicação vive sozinha ?
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)"
}
}
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
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 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 !
45. 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.)
46. Passos para ter sucesso com mapas
Crie o novo projeto
Vamos criar um novo projeto
New -> Android Application Project
47. 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"/>
48. 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"
/>
49. 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;
}
}
50. 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
51. 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
52. 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
53. 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
55. Passos para ter sucesso com mapas
Rode a aplicação novamente
56. 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 !
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 minha localizaçã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 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();
}
…
}
}
63. 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);
}
64. 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);