pdp android trabalho

Upload: frededicolima

Post on 08-Apr-2018

218 views

Category:

Documents


0 download

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