pdp android trabalho
TRANSCRIPT
-
8/7/2019 Pdp Android Trabalho
1/48
Android
Aspectos de PDP
-
8/7/2019 Pdp Android Trabalho
2/48
Tpicos Android
Apresentao
Introduo
Fundamentos Threads
RPC
Location based Services
Peer to peer
Bibliografia
-
8/7/2019 Pdp Android Trabalho
3/48
Apresentao Android
Trabalho da disciplina de Programao Distribuda eParalela
Semetre: 2009 1
Professor: Cludio Fernando Resin Geyer
Aluno: Ricardo da Silva Floriano Machado
Matrcula 31009
-
8/7/2019 Pdp Android Trabalho
4/48
Introduo Android
O que ? Plataforma para dispositivos mveis
Um sistema operacional, middleware e aplicaes chave.
Open source
Construido sobre um Linux Kernel
Desenvolvido pela Open Handset Alliance.
Android SDK linguagem Java
Dalvik virtual machine
-
8/7/2019 Pdp Android Trabalho
5/48
Introduo Android
Arquitetura
-
8/7/2019 Pdp Android Trabalho
6/48
Fundamentos Android
Aplicaes Por padro cada aplicao roda em seu prprio processo
linux.
Cada processo possui sua prpria JVM, isolamento daaplicao em nvel de cdigo.
Uma aplicao pode fazer uso de outras aplicaes. Oude componentes de outras aplicaoes.
No possuem um ponto de entrada padro, como ummtodo main() em java, mas sim pontos de entradasdefinidos.
-
8/7/2019 Pdp Android Trabalho
7/48
Fundamentos Android
Componentes
Para que uma aplicao possa fazer uso de outras, oupartes de outras aplicaes, android utiliza componentes
que podem ser criados, iniciados ou chamados quandonecessrios.
Android possue quatro tipos de componentes:
Activities
Services
Broadcast Receivers
Content Providers
-
8/7/2019 Pdp Android Trabalho
8/48
Fundamentos Android
Activities
Sempre um objeto que herda da classe Activity.
Apresenta uma interface visual para o usurio, querepresenta alguma ao ou funcionalidade especfica.
Uma aplicao formada por uma ou diversas activities.
Uma activity pode chamar e iniciar outra, possibilitando
assim a mudana da aplicao sendo utilizada.
-
8/7/2019 Pdp Android Trabalho
9/48
Fundamentos Android
Activities
Cada activity recebe uma janela padro, mas pode fazeruso de mais de uma.
Uma hierarquia de views constitui o conteudo visual deuma janela.
As views so onde ocorre a interao com o usurio.
Uma view uma instancia da classe View.
-
8/7/2019 Pdp Android Trabalho
10/48
Fundamentos Android
Services
No possui interface visual, mas sim, roda embackground, por um periodo indefinido de tempo.
Extende a classe Service.
Activities interagem com services, atravs de interfacesque estes expem.
Normalmente geram threads para executar embackground, para evitar o bloqueio da aplicao.
-
8/7/2019 Pdp Android Trabalho
11/48
Fundamentos Android
Broadcast receivers
Tem a funo especfica de receber e reagir a anncios debroadcast.
Extende a classe BroadcastReceiver.
Uma aplicao pode possuir quantos broadcast receiversquantos forem necessrios.
Usam activities para tratar as informaes que recebem.
-
8/7/2019 Pdp Android Trabalho
12/48
Fundamentos Android
Content providers
Possibilita que um determinado conjunto de dados fique
disponvel para outras aplicaes acessarem.
extende a classe ContentProvider, onde esto os mtodosque devem ser implementados para permitir o manuseio
dos dados.
Aplicaes usam um ContentResolver pra se comunicarcom um ContentProvider.
O ContentResolver quem acessa os mtodos paramanuseio dos dados disponibilizados pelo CP.
-
8/7/2019 Pdp Android Trabalho
13/48
Fundamentos Android
Ativando componentes
ContentProviders so ativados por requisies de algumContentResolver.
Activities, Services e Broadcast Receiverers so ativadospor mensagens assncronas chamadas: Intents.
-
8/7/2019 Pdp Android Trabalho
14/48
Fundamentos Android
Intents
So objetos do tipo Intent que possuem o conteudo deuma mensagem.
Para activities e services, um intent nomeia a ao a serexecutada, assim como a localizao de dados que seronecessrios.
Para broadcast receivers, um intent nomeia a ao sendoanunciada.
-
8/7/2019 Pdp Android Trabalho
15/48
Fundamentos Android
AndroidManifest
Arquivo xml onde so declarados os componentes daaplicao, alm de outras informaes sobre a aplicao.
Activities, Services e Content Providers que no foremdeclarados neste arquivo, no sero visveis pelo sistema,e portanto no podero ser utilizados.
Broadcast Receivers podem ser criados dinamicamente e
registrados depois.
-
8/7/2019 Pdp Android Trabalho
16/48
Fundamentos Android
AndroidManifest
Intents podem explicitamente nomear um componente
destino, porm quando isso no ocorre, so usados os
intent filters. Estes filtros so declarados neste arquivo xml e apontam
possveis componentes que possam ser alvo de umdeterminado intent.
-
8/7/2019 Pdp Android Trabalho
17/48
Fundamentos Android
Activities e Tasks
Task o que o usurio enxerga como sendo umaaplicao. um grupo de activities arranjados em uma
estrutura de pilha. A activity raiz da pilha a que iniciou a task e a que est
no topo a que est rodando.
A pilha nunca reorganizada, somente se coloca ou seretira objetos dela.
Activities possuem afinidades definidas, unindo elas em
tasks quando for o caso.
-
8/7/2019 Pdp Android Trabalho
18/48
Threads Android
Por que usar?
Todos os componentes rodam na thread principal da
aplicao.
Seu processamento bloqueia todos os demaiscomponentes.
Para evitar falta de responsividade da aplicao, novasthreads em background.
Processamentos que consomem muito tempo devem ser
colocados em novas threads.
-
8/7/2019 Pdp Android Trabalho
19/48
Threads Android
Criao So criadas usando Java Threads comuns:
private void mainProcessing() {
Thread thread = new Thread(doBackgroundThreadProcessing);thread.start();}private Runnable doBackgroundThreadProcessing = new Runnable() {
public void run() {backgroundThreadProcessing();
}
};private void backgroundThreadProcessing() {
[ ... operao ... ]
-
8/7/2019 Pdp Android Trabalho
20/48
Threads Android
Comunicao A thread principal da aplicao dedicada a gerenciar os
principais objetos da aplicao e as janelas por eles
criadas. Threads filhas criadas podem se comunicar com a thread
principal atravs do uso da classe Handler.
Utilizando uma chamada do mtodo post() ou do mtodosendMessage().
-
8/7/2019 Pdp Android Trabalho
21/48
Threads Android
Comunicao (cont.)
// Initialize a handler on the main thread.
private Handler handler = new Handler();
private void mainProcessing() {
Thread thread = new Thread(doBackgroundThreadProcessing);
thread.start();
}
private Runnable doBackgroundThreadProcessing = new Runnable() {
public void run() {
backgroundThreadProcessing();}
};
-
8/7/2019 Pdp Android Trabalho
22/48
Threads Android
Comunicao (cont.)
// Method which does some processing in the background.
private void backgroundThreadProcessing() {
[ ... Time consuming operations ... ]
handler.post(doUpdateGUI);}
// Runnable that executes the update GUI method.
private Runnable doUpdateGUI = new Runnable() {
public void run() {
updateGUI();
}
};
private void updateGUI() {
[ ... Open a dialog or modify a GUI element ... ]
}
-
8/7/2019 Pdp Android Trabalho
23/48
RPC Android
-
8/7/2019 Pdp Android Trabalho
24/48
RPC Android
AIDL
Necessidade de passar objetos entre processos diferentes.
Normalmente no android um processo no pode acessar a
memria de outro processo. Decomposio dos objetos em primitivas que o SO
entenda.
Android Interface Definition Language presta esteservio, cria uma interface para dois processos secomuniquem via objetos.
-
8/7/2019 Pdp Android Trabalho
25/48
RPC Android
Definio de uma interface para rpc.
Uso da ferramenta aidl para gerao de umainterface visvel local e remotamente.
Esta interface ir conter duas classes que fazem aadministrao do rpc para a interface definida.
Ambas implementam a interface IBinder.
Uma ser usada localmente e internamente pelosistema, a outra, chamada Stub, implementa a classe
Binder.
-
8/7/2019 Pdp Android Trabalho
26/48
RPC Android
Tipicamente o processo remoto ser gerenciado porum service.
Este service ter ambas, a interface e a subclasse
stub geradas pelo aidl.
Clientes deste service ter somente a interface.
-
8/7/2019 Pdp Android Trabalho
27/48
RPC Android
Estabelecendo uma conexo service cliente Clientes do service implementaro os mtodos
onServiceConnected() e onServiceDisconected().
Chamaro o mtodo bindService() para efetuar uma conexo. O mtodo onBind() do service quem aceita ou rejeita uma
conexo, se aceitar retorna uma instncia da subclasse stub.
Se o service aceita a conexo, o android chama o metodo
onServiceConnected() do cliente e passa um objeto IBinder
Este objeto um proxy para a subclasse stub gerenciada peloservice. Atravs deste proxy o cliente pode fazer chamadasno service remoto.
-
8/7/2019 Pdp Android Trabalho
28/48
Location-based Services Android
o termo empregado ao conjunto de diferentestecnologias usadas para determinar a localizao deum aparelho mvel.
Os dois principais elementos de um LBS so: Location Manager prov o contato, o acesso aos LBS.
Location Provider cada um dos diferentes, representa a
tecnologia para determinar a localizao do dispositivo.
-
8/7/2019 Pdp Android Trabalho
29/48
Location-based Services Android
Acesso aos location based services obtido atravsde um LocationManager Service.
Para se obter um Location Manager deve se obter
uma instancia de um LOCATION_SERVICEatravs do mtodo getSystemService().
String serviceString = Context.LOCATION_SERVICE;
LocationManager locationManager;locationManager = (LocationManager)getSystemService(serviceString);
-
8/7/2019 Pdp Android Trabalho
30/48
Location-based Services Android
Selecionando um LocationProvider
String providerName = LocationManager.GPS_PROVIDER;
LocationProvider gpsProvider;
gpsProvider = locationManager.getProvider(providerName);
-
8/7/2019 Pdp Android Trabalho
31/48
Location-based Services Android
Encontrando Location providers disponveis
A classe LocationManager possui constantes para os dois
mais comuns Location providers:
LocationManager.GPS_PROVIDER;
LocationManager.NETWORK_PROVIDER;
-
8/7/2019 Pdp Android Trabalho
32/48
Location-based Services Android
Para encontrar todos os disponiveis, oLocationManager fornece o metodo getProviders().
boolean enabledOnly = true;
List providers =
locationManager.getProviders(enabledOnly);
d id
-
8/7/2019 Pdp Android Trabalho
33/48
Location-based Services Android
Normalmente se busca locationProviders porcritrios logsticos.
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setCostAllowed(true);
String bestProvider = locationManager.getBestProvider(criteria, true);
A d id
-
8/7/2019 Pdp Android Trabalho
34/48
Location-based Services Android
Exemplo Onde estou?
public class WhereAmI extends Activity {
@Override
public void onCreate(Bundle icicle) {
...
LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);updateWithNewLocation(location);
}
A d id
-
8/7/2019 Pdp Android Trabalho
35/48
Location-based Services Android
Exemplo Onde estou?
private void updateWithNewLocation(Location location) {
String latLongString;
TextView myLocationText;
myLocationText = (TextView)findViewById(R.id.myLocationText);
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = Lat: + lat + \nLong: + lng;
} else {latLongString = No location found;
}
myLocationText.setText(Your Current Position is:\n +
latLongString);
}
A d id
-
8/7/2019 Pdp Android Trabalho
36/48
Location-based Services Android
Alertas de proximidade
Permitem que uma aplicao dispare triggers quando odispositivo se move para perto ou se afaste de uma
posio geogrfica. Android pode usar diferentes LocationProviders,
dependendo quo longe se est de uma localizao, paradiminuir custos se improvvel que um alerta seja
disparado. Para definir um alerta de proximidade, deve se definir
um ponto central, um raio partindo desde ponto central e
um timeout para o alerta.
-
8/7/2019 Pdp Android Trabalho
37/48
L ti b d S i Android
-
8/7/2019 Pdp Android Trabalho
38/48
Location-based Services Android
O Exemplo a seguir define um alerta de proximidade que nuncaexpira e disparado quando o dispositivo se aproxima 10 metrosdo alvo:
private static String TREASURE_PROXIMITY_ALERT = com.paad.treasurealert;
private void setProximityAlert() {
String locService = Context.LOCATION_SERVICE;
LocationManager locationManager;
locationManager = (LocationManager)getSystemService(locService);
double lat = 73.147536;
double lng = 0.510638;
float radius = 100f; // meters
L ti b d S i Android
-
8/7/2019 Pdp Android Trabalho
39/48
Location-based Services Android
O Exemplo (cont.):
long expiration = 1; // do not expire
Intent intent = new Intent(TREASURE_PROXIMITY_ALERT);
PendingIntent proximityIntent =PendingIntent.getBroadcast(this, 1, intent, 0);
locationManager.addProximityAlert(lat, lng, radius, expiration, proximityIntent);
}
Quando o LocationManager detecta que o dispositivo se
moveu tanto para fora quanto para dentro da rea cobertapelo raio, o Intent empacotado ser disaparado.
L ti b d S i Android
-
8/7/2019 Pdp Android Trabalho
40/48
Location-based Services Android
O Exemplo (cont.):
Para tratar alertas de proximidade deve ser criado um
BroadcastReceiver:
public class ProximityIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive (Context context, Intent intent) {
String key = LocationManager.KEY_PROXIMITY_ENTERING;
Boolean entering = intent.getBooleanExtra(key, false);[ ... perform proximity alert actions ... ]
}
}
Location based Ser ices Android
-
8/7/2019 Pdp Android Trabalho
41/48
Location-based Services Android
O Exemplo (cont.):
Para iniciar a escuta pelos alertas, o broadcast receiver deve
ser registrado:
IntentFilter filter = new IntentFilter(TREASURE_PROXIMITY_ALERT);
registerReceiver(new ProximityIntentReceiver(), filter);
Peer to peer Android
-
8/7/2019 Pdp Android Trabalho
42/48
Peer-to-peer Android
Android contm um framework para InstantMessaging (um servio GTalk) que dentre suasfuncionalidades, oferece:
enviar e receber mensagens de texto definir status de usurios pela presena
fazer broadcast de intents para dispositivos android
remotos
Por razes de segurana, a api de IM foi removida,apesar de ser esperado que novas verses do androidsdk venham com a api habilitada.
Peer to peer Android
-
8/7/2019 Pdp Android Trabalho
43/48
Peer-to-peer Android
O servio de instant messaging no Android atraesdo Gtalk.
GTalk baseado em XMPP.
XMPP um protocolo aberto para mensagensinstantaneas, basedado em xml.
Uma funcionalidade importante do servio
fornecido pelo Gtalk, a possibilidade do broadcastde Intents para outros dispositovos android.
Peer to peer Android
-
8/7/2019 Pdp Android Trabalho
44/48
Peer-to-peer Android
A funcionalidade de IM no android atravs do usode algumas interfaces:
IGtalkService criao, acesso e gerenciamento de conexes.
IGtalkConnection conexo socket entre o dispositivo e oservidor.
IImSession usada para efetuar a maior parte do controle de IM.
IChatSession abertura, fechamento, participao em chats.
IChatListener usada para lidar com mensagens em uma IM
Session ou Chat.
IGroupChatInvitationListener
IRosterListener
Peer to peer Android
-
8/7/2019 Pdp Android Trabalho
45/48
Peer-to-peer Android
Para usar o servio GTalk, preciso estar vinculado a suaaplicao usando bindService():
IGTalkService gtalkService;
private void bindGTalk() {
Intent i = new Intent();
i.setComponent(GTalkServiceConstants.GTALK_SERVICE_COMPONENT);
bindService(i, gTalkConnection, 0);
}
Peer-to-peer Android
-
8/7/2019 Pdp Android Trabalho
46/48
Peer-to-peer Android
Para usar o servio GTalk(cont):
private ServiceConnection gTalkConnection = new ServiceConnection() {
// When the service connects, get the default GTalk Sessionpublic void onServiceConnected(ComponentName className, IBinder service) {
gtalkService = IGTalkService.Stub.asInterface(service);
}
public void onServiceDisconnected(ComponentName className) {
gtalkService = null;
}
};
Peer-to-peer Android
-
8/7/2019 Pdp Android Trabalho
47/48
Peer-to-peer Android
O vnculo a um GtalkService representa uma conexo com as APIsdo GTalk, antes de usar o servio de IM, uma GTalkConnectionprecisa ser iniciada.
IGTalkConnection gTalkConnection = gtalkService.getDefaultConnection();
IImSession imSession = gTalkConnection.getDefaultImSession();
Bibliografia Android
-
8/7/2019 Pdp Android Trabalho
48/48
Bibliografia Android
http://developer.android.com/index.html
http://www.android.com/
Meier, Reto. Professional Android Application
Development. Wrox