desenvolvimento android

135
2015.2 PROF ANDERSON TÓPICOS AVANÇADOS EM DESENVOLVIMENTO DE SISTEMAS

Upload: sandro-marcelo-arpi

Post on 08-Apr-2016

38 views

Category:

Documents


9 download

DESCRIPTION

Introdução ao desenvolvimento android

TRANSCRIPT

Page 1: Desenvolvimento android

2015.2PROF ANDERSON

TÓPICOS AVANÇADOS EM DESENVOLVIMENTO

DE SISTEMAS

Page 2: Desenvolvimento android

APRESENTAÇÃO

Currículo Lattes: http://lattes.cnpq.br/1640275970796898

Email: [email protected]

Page 3: Desenvolvimento android

AV1: Obrigatória, presencial, individual e sem consulta. Compõe 100% da nota.

AV2: Prova presencial (tipo objetiva, discursiva ou mista) ou online (tipo objetiva) sob

a responsabilidade e elaborada pelo professor, seguindo princípios básicos

definidos previamente.

APS: Obrigatória e compõe 40% da AV2 ou da Segunda Chamada.

2A CHAMADA: Obrigatória, presencial, individual e sem consulta. Para os alunos

que não fizeram AV1 vale 10,0 pontos. Para os alunos que não fizeram AV2 vale

6,0 pontos.

AVF: Obrigatória, presencial, individual e sem consulta. Compõe 100% da nota.

AVALIAÇÃO DE APRENDIZAGEM - CRITÉRIOS

TÓPICOS AVANÇADOS

Page 4: Desenvolvimento android

AVALIAÇÃO DE APRENDIZAGEM - CRITÉRIOS

Prova Questões Objetivas Questões DiscursivasQuantidade Valor Quantidade Valor

AV1 6 1 2 2AV2 6 0,5 2 1,5

2a Chamada da AV1 6 1 2 2

2a Chamadada AV2 6 0,5 2 1,5

AVF 6 1 2 2

TÓPICOS AVANÇADOS

Page 5: Desenvolvimento android

Condições para aprovação:

- Frequência mínima de 75% das aulas

- Nota mínima:

- SEM AVF: 7,0

- COM AVF: 6,0

CONDIÇÕES PARA APROVAÇÃO NA DISCIPLINA

TÓPICOS AVANÇADOS

Page 6: Desenvolvimento android

Justificatica:

- Atestado médico ou do trabalho.

- Deverá conter o dia que o aluno esteve ausente.

- Colocar anotado no verso o nome completo, turma, disciplina e unidade.

- O aluno que faltar a AV1 ou a AV2 deverá entregar o atestado no dia da prova de SEGUNDA CHAMADA, caso contrário não poderá fazer a prova.

CONDIÇÕES PARA APROVAÇÃO NA DISCIPLINA

TÓPICOS AVANÇADOS

Page 7: Desenvolvimento android

DATAS IMPORTANTES

21 SET: AV1 Matéria: Unidades 1, 2 e 3.

09 NOV: AV2 Matéria: Unidades 1, 2, 3, 4 e 5.

23 NOV: Segunda Chamada Matéria: Unidades 1, 2, 3, 4 e 5.

30 NOV: AVF Matéria: Unidades 1, 2, 3, 4 e 5.

TÓPICOS AVANÇADOS

Page 8: Desenvolvimento android

CONTEÚDO PROGRAMÁTICO

UNIDADE 1 - INTRODUÇÃO UNIDADE 2 - COMPONENTES UNIDADE 3 - SENSORES E APIS UNIDADE 4 - INTRODUÇÃO CLOUD COMPUTING UNIDADE 5 - AMAZON, GOOGLE e MICROSOFT

TÓPICOS AVANÇADOS

Page 9: Desenvolvimento android

BIBLIOGRAFIA

ARTIGOS DISPONIBILIZADOS NO AVA

TÓPICOS AVANÇADOS

Page 10: Desenvolvimento android

ATIVIDADE SUPERVISIONADA

TÓPICOS AVANÇADOS

ENUNCIADO: Implemente um aplicativo para um dispositivo móvel (Android) que informe a quantidade de memória em um servidor linux

Requisitos:● O app deverá solicitar o endereço (IP) do servidor;● O app deverá solicitar login e senha para a conexão com o servidor;● No servidor poderá ter:○ uma base de dados com a informação atualizada;○ um web service para prover a informação;○ uma aplicação para prover a informação;

Prazo: 09 NOVGrupo: 05 alunosEntrega: Pasta com projetos + relatório explicando a solução (deverá seguir o padrão ABNT)

Page 11: Desenvolvimento android

INTRODUÇÃO-Características-AndroidManifest.xml-Principais Componentes-Ambiente de Programação

I

Page 12: Desenvolvimento android

Características

● O sistema operacional Android provê uma gama de bibliotecas para muitas características do sistema como contatos, discagem do telefone, notificações, gráficos 2D/3D, acesso à base de dados, criptografia e segurança, câmera, audio, I/O, …;

● O java presente no Android é compilado para um formato binário especial chamado Dalvik (DVM - dex); e

● Separação entre arquivos de aplicações, processos, etc;

INTRODUÇÃOCaracterísticas Android

Page 13: Desenvolvimento android

INTRODUÇÃOCaracterísticas Android

Page 14: Desenvolvimento android

INTRODUÇÃOCaracterísticas Android

Page 15: Desenvolvimento android

INTRODUÇÃOCaracterísticas Android

https://en.wikipedia.org/wiki/Android_version_history

Page 16: Desenvolvimento android

INTRODUÇÃOCaracterísticas Android

Características

● Os sistemas operacionais, depois de disponibilizados pelo Google, são customizados pelas fabricantes dos aparelhos e pela operadora de telefonia;

Page 17: Desenvolvimento android

INTRODUÇÃOCaracterísticas

- Ambiente de desenvolvimento:

-Android Studio(https://developer.android.com/sdk/installing/studio.html)

- Eclipse ( http://www.eclipse.org/downloads/ )- Android SDK ( http://developer.android.com/sdk/index.html )

- IDEs proprietárias (RAD Studio X5, etc).

Page 18: Desenvolvimento android

INTRODUÇÃOCaracterísticas

Page 19: Desenvolvimento android

- Aplicativo Olá Mundo;

JAVA ANDROID

Page 20: Desenvolvimento android

ESTRUTURA DO PROJETO● manifests○ AndroidManifest.xml - todas as

configurações e personalizações do projeto;

● src/java/…○ código fonte das classes em Java;

● res/... = arquivos contendo recursos do sistema (muitos são XML)○ drawable/ = imagens○ layout/ = descrição dos layouts de interface

com o usuário○ menu/ = todas as opções de menus do

aplicativo○ values/ = valores de constantes e arrays○ strings = dados de localização○ styles = estilo geral da aplicação

● Gradle○ a build/sistema de gerenciamento de

compilação○ build.gradle = principal arquivo de montagem

do aplicativo

Page 21: Desenvolvimento android

DISPOSITIVOS VIRTUAIS● permite executar seu projeto em um

emulador com as características de um dispositivo real○ quando você clica em executar, ele

monta a aplicação, instala no dispositivo e executa ele;

● precisa ter sido configurado primeiro;

● alternativa: instalar o aplicativo no seu próprio telefone○ prós: o aplicativo vai executar mais

rápido, o teste vai ser mais real; e○ contras: precisa de um dispositivo

com Android, que deverá estar conectado ao computador.

Page 22: Desenvolvimento android

CICLO DE VIDA

Page 23: Desenvolvimento android

WIDGETS

Page 24: Desenvolvimento android

EVENTOS● evento: Um estímulo externo que o seu programa deve

responder;● Eventos comuns englobam:○ Movimento do mouse, pressionar uma tecla, etc;● Programação orientada a eventos: as ações do programa

são dirigidas pelos eventos do usuário;○ Normalmente usado em programas com interface gráfica;● Para "responder" a um evento, é necessário escrever

métodos que manipulem cada tipo de evento (métodos "listener"); e○ Esses métodos são ○ interligados aos widgets.

Page 25: Desenvolvimento android

OBJETOS VIEW● Cada widget está associado a um objeto Java● Eles são subclasses da classe View;○ Exemplos: Button, TextView, EditText, …● Objetos View tem muitos métodos gets e sets que

correspondem às propriedas no modo de exibição Design:○ background, bottom, ID, left, margin, padding, right,

text, textAlignment, textSize, top, typeface, visibility, x, y, z, …

○ Exemplo: para a propriedade de texto de um Button, existem os seguintes métodos: ■ public String getText() ■ public void setText(String text)

Page 26: Desenvolvimento android

OBJETOS VIEW

public void button1_onclick(View view){

TextView tv = (TextView) findViewById(R.id.mytextview); tv.setText("You clicked it!");

}

Page 27: Desenvolvimento android

MENSAGENS● Toast.makeText(this, "message", duration).

show();○ Duração:Toast.LENGTH_SHORT ou

LENGTH_LONG● Um "Toast" é uma mensagem do tipo pop-up

que aparece por um curto período de tempo.● Útil para exibir pequenas atualizações ou

resposta de eventos;

Page 28: Desenvolvimento android

Maj Andersone-mail: [email protected]

Componentes App

CONTENT PROVIDERS

Gerencia um conjuntode dados que podem

ser compartilhados

ACTIVITY

É uma tela que o usuário vai usar

para interagir com osistema.

BROADCAST RECEIVERS

Mensagens enviadas pelo sistema ou por outro app.

SERVICE

Executa em background,sem ter tela para interagir com o usuário.

B

A

C

INTRODUÇÃOPrincipais Componentes

S

Page 29: Desenvolvimento android

- Activities: interface visual do usuário com foco em uma única ação do usuário;

- componente mais básico para várias aplicações;

- algumas aplicações possuem várias activities;

- cada uma é implementada como uma subclasse da classe Activity;

ACTIVITIESPrincipais Componentes

Page 30: Desenvolvimento android

- Usado para tratamento de eventos globais do telefone.

Ex: bateria fraca, conexão com eletricidade (carregando), mudança de timezone, etc.

- os eventos são representados pela classe Intent;

- Lista: http://developer.android.com/reference/android/content/Intent.html

- Não possui interface do usuário;

- É tratado pelo onReceive

- O código deve ser pequeno. Curta duração. (*)

- Registro: estático ou dinâmico

@Override public void onReceive(Context context, Intent, intent) {….

}

BROADCAST RECEIVERSPrincipais Componentes

Page 31: Desenvolvimento android

- Estático

- Dinâmico: Implementado dentro do código

< receiver android:name=“.NOME DA CLASSE”> <intent-filter> <action android:name=“…”> </intent-filter></receiver>

BROADCAST RECEIVERSPrincipais Componentes

Page 32: Desenvolvimento android

- aplicações de longa duração;

- não possui interface;

- executa em background (segundo plano);

- são iniciados pelo método startService(Intent) ou bindService();

- duas formas: Started (chamado por um startService()) e Bound ().

public class ExemploIntentService extends IntentService

protected void onHandleIntent(Intent intent) {

SERVICEPrincipais Componentes

Page 33: Desenvolvimento android

- Content Providers: permite a troca de dados entre aplicações;

- torna os dados disponíveis para outras aplicações;

- extensão da classe ContentProvider;

CONTENT PROVIDERSPrincipais Componentes

Page 34: Desenvolvimento android

-deve estar na raiz do projeto;

-contém todos os componentes do app;

-contém as permissões que o app possui; e

-dentre outros.

ANDROID MANIFEST

Page 35: Desenvolvimento android

<?xml version="1.0" encoding="utf-8"?>

<manifest>

<uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture />

<application>

<activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </activity>

<activity-alias> <intent-filter> . . . </intent-filter> <meta-data /> </activity-alias>

<service> <intent-filter> . . . </intent-filter> <meta-data/> </service>

<receiver> <intent-filter> . . . </intent-filter> <meta-data /> </receiver>

<provider> <grant-uri-permission /> <meta-data /> <path-permission /> </provider>

<uses-library />

</application>

</manifest>

ANDROID MANIFEST

Page 36: Desenvolvimento android

RESOLUÇÃO

Page 37: Desenvolvimento android

AndroidManifest.xml

RESOLUÇÃO

Page 38: Desenvolvimento android

- Aplicativo Olá Mundo;

INTRODUÇÃO

Page 39: Desenvolvimento android

- Aplicativo Olá Mundo;

JAVA ANDROID

Page 40: Desenvolvimento android

- Aplicativo Olá Mundo;

import android.app.Activity;import android.os.Bundle;import android.widget.TextView;

public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView view = new TextView(this); view.setText("Hello, Android"); setContentView(view);

}}

INTRODUÇÃOAplicativo Olá Mundo

Page 41: Desenvolvimento android

COMPONENTES

- Activities

- Services

- Intents

- IntentFilters

- Content Providers

- Broadcast Receivers

II

Page 42: Desenvolvimento android

ACTIVITYCOMPONENTES

No Android, uma aplicação pode ser formada por mais de uma activity.

Page 43: Desenvolvimento android

ACTIVITYCOMPONENTES

● No Android Studio, clique com o botão direito do mouse no "app"

○ New -> Activity

■ cria um novo arquivoXML em res/layouts

■ cria uma nova classe Java em src/java

■ adiciona a informação ao arquivo AndroidManifest.xml sobre a activity

(sem esta informação, o aplicativo não vai permitir que essa activity seja

exibida)

Page 44: Desenvolvimento android

ACTIVITYCOMPONENTES

Page 45: Desenvolvimento android

COMPONENTESIniciar uma activity:

• é necessário usar o método startActivity() presente no objeto Context, ou na

Activity.

Intent intent = new Intent (this , NewActivity.class );

startActivity ( intent );

● intent: é a "ponte" entre as activities;

○ uma forma de que uma activity pode chamar outra

○ a activity pode estar no mesmo aplicativo ou em outro.;

○ pode armazenar um dado ou passar como parâmetro para a activity; e

○ a segunda activity pode "retornar" alguma information para a activity que a

chamou.

Page 46: Desenvolvimento android

COMPONENTESACTIVITY

Page 47: Desenvolvimento android

COMPONENTES

Passar dados para a uma Activity:

Intent intent = new Intent (this , NewActivity.class );

intent.putExtra ("curso", "ADS");

intent.putExtra (“turma", “132");

Receber os dados:

Bundle extras = getIntent().getExtras();

String curso = extras.getString ("curso");

String turma = extras.getString (“turma");

ACTIVITY

Page 48: Desenvolvimento android

COMPONENTES

Iniciar uma activity para recuperar um resultado:

● startActivityForResult

● Intent intent = new Intent();

● intent.putExtra("name", value);

● setResult(RESULT_OK, intent);

● finish(); // calls onDestroy

ACTIVITY

Page 49: Desenvolvimento android

COMPONENTES

Criação de filtros que determinam quais Intents devem ser executadas para cada mensagem

<activity android:name=".HelloActivity" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

ACTIVITY

Page 50: Desenvolvimento android

COMPONENTES

Criação de filtros que determinam quais Intents devem ser executadas para cada mensagem

<activity android:name=".HelloActivity" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

Diz que activity é um ponto de partida, semelhante ao publicstatic void main() da Java

ACTIVITY

Page 51: Desenvolvimento android

COMPONENTES

Criação de filtros que determinam quais Intents devem ser executadas para cada mensagem

<activity android:name=".HelloActivity" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

Indica que o ícone da activity deverá aparecer na tela pode ser aberta pelo usuário

ACTIVITY

Page 52: Desenvolvimento android

COMPONENTESACTIVITY

Page 53: Desenvolvimento android

COMPONENTES

● Executa a lógica de inicialização da aplicação que deve ocorrer apenas uma vez para todo o cliclo de vida da activity

ACTIVITY

Page 54: Desenvolvimento android

COMPONENTES

Quando onCreate () termina a execução, o sistema chama onStart() e onResume ().● A atividade não reside nos estados criados ou iniciados.● A atividade se torna visível para o usuário quando onStart () é chamado,● onResume () é rapidamente chamado em seguida e a atividade permanece no estado de retomada até que algo aconteça para mudar, como quando uma chamada é recebida, o usuário navega para outra atividade, ou a tela do dispositivo desliga-se.

ACTIVITY

Page 55: Desenvolvimento android

COMPONENTES

● Executa a lógica de inicialização da aplicação que deve ocorrer apenas uma vez para todo o cliclo de vida da activity

ACTIVITY

Page 56: Desenvolvimento android

COMPONENTES

O sistema onDestroy() como último sinal de que a atividade está sendo completamente removida da memória do sistema.

ACTIVITY

Page 57: Desenvolvimento android

COMPONENTES

Nota: O sistema chama onDestroy() depois de onPause() e onStop() em todas as situações, exceto uma:

●Chamar finish() de dentro do onCreate() - atividade funciona temporariamente para lançar uma outra atividade

●Neste caso, o sistema chama imediatamente onDestroy () sem chamar qualquer um dos outros métodos de ciclo de vida.

ACTIVITY

Page 58: Desenvolvimento android

COMPONENTES

A maioria dos aplicativos não precisam implementar este método, porque as referências de classe locais são destruídos com a atividade e sua atividade deve executar a maioria de limpeza durante onPause () e onStop ().● Se a atividade inclui tópicos criados durante onCreate () ou outros recursos de longa duração que poderiam vazar memória se não for devidamente fechado, eles devem ser destruídos durante onDestroy ().

ACTIVITY

Page 59: Desenvolvimento android

COMPONENTES

Activity do primeiro plano é obstruída por outros componentes visuais e provocam a pausa da Activity.● Exemplo: uma atividade semi-transparente abre (como uma no estilo de um diálogo), a atividade anterior pausa.● Enquanto a atividade ainda é parcialmente visível, mas atualmente não é a atividade em foco, permanece interrompida.● No entanto, se a Activity for totalmente obstruída e ficar não é visível, ela para (onStop)

ACTIVITY

Page 60: Desenvolvimento android

COMPONENTES

A Activity entra no estado de pausa, o sistema chama o método onPause(), que permite parar ações que não devem continuar durante a pausa (como um vídeo) ou persistir alguma informação que deva ser salva.● Se retornar a partir do estado de pausa, o sistema reinicia-a e chama o método onResume ().

ACTIVITY

Page 61: Desenvolvimento android

COMPONENTES

● Use onPause() para:● Parar animações ou outras ações que podem consumir CPU.● Confirmar alterações não salvas, caso tenham que ser permanentemente salvas quando saem.● Liberar recursos do sistema:– broadcast receivers, handles para sensores (como GPS), ou outros recursos que afetem a vida útil da bateria e não necessários durante a pausa da atividade.

ACTIVITY

Page 62: Desenvolvimento android

COMPONENTES

Não se deve usar onPause() para armazenar as alterações do usuário (como informações inseridas em um formulário) para armazenamento permanente.● Só faça armazenamento permanente dentro onPause () para alterações salvas automaticamente● Procure manter a quantidade de operações realizadas no método onPause () relativamente simples, a fim de permitir uma transição rápida para o próximo destino caso sua atividade deva ser realmente interrompida.

ACTIVITY

Page 63: Desenvolvimento android

COMPONENTES

Quando a atividade é interrompida, uma instância dela é mantida residente na memória e recuperada quando a atividade recomeça.● Não é necessário reinicializar os componentes criados durante qualquer um dos métodos de retorno de chamada que antecederam o estado retomado.

ACTIVITY

Page 64: Desenvolvimento android

COMPONENTES

Quando o usuário retoma suas atividades a partir do estado de pausa, o sistema chama o método onResume ().● O sistema chama este método cada vez que a atividade vem para o primeiro plano, inclusive quando ele é criado pela primeira vez

ACTIVITY

Page 65: Desenvolvimento android

COMPONENTES

Use onResume () para inicializar os componentes liberados durante onPause () e executar outras inicializações que devem ocorrer cada vez que a atividade entra no estado de Resumed (iniciar animações, inicializar componentes utilizados apenas quando a atividade tem o foco do usuário).

ACTIVITY

Page 66: Desenvolvimento android

COMPONENTES

- Um intent é usado para fazer uma tarefa;- A activity chama um intent e só espera a resposta da execução;

INTENT

Page 67: Desenvolvimento android

COMPONENTES

-São necessárias duas informações básicas: a ação que será executada e os dados que serão passados para o intent;

Atributo Intent Descrição

Action String contendo a ação que será executada

Category Descreve onde e como o intent pode ser usado

Component Especifica um pacote e classe para o intent usar

Data Dados que serão trabalhados

Extra Dados extras para serem enviados ao Intent

Type Especifica um tipo MIME

INTENT

Page 68: Desenvolvimento android

COMPONENTES

-pode ser invocado de duas formas:

-Implícito: queremos apenas que seja realizado. Exemplo: o uso de um aplicativo discador. Queremos apenas que seja feita a ligação, não importando quem chamou o intent.

- Explícito: o nosso código especifica o componente que deve realizar o intent.

Intent(Context, Class)

INTENT

Page 69: Desenvolvimento android

COMPONENTES

-três componentes podem manipular intents:

-activity-service-broadcast receiver

Resultados serão divulgados através dos intent-filter.

- para cada intent-filter, haverá um intent associado

INTENT

Page 70: Desenvolvimento android

COMPONENTES

- Instalação APK

- Registro componentes do aplicativo (intents, intent-filter)

- com um intent-filter registrado, será realizado o mapeamento entre o intent e o

componente associado (activity, service ou broadcast receiver)

INTENT

Page 71: Desenvolvimento android

COMPONENTES

<activity android:name=".Primeira" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

Cada intent-filter pode especificar zero ou mais categorias e zero ou mais ações.

INTENT

Page 72: Desenvolvimento android

COMPONENTES

<intent-filter>

<category android:name=“android.intent.category.DEFAULT”/>

<action android:name=“com.msi.manning.restaurante.VIEW_LIST” />

</intent-filter>

Intent intent = new Intent(Constants.INTENT_ACTION_VIEW_LIST);

startActivity(intent);

AndroidManifest.xml

Java

INTENT

Page 73: Desenvolvimento android

COMPONENTES

-Podemos transmitir informações (dados) entre aplicativos como também eventos para

outros receptores capacitados;

- No caso de eventos, quando fazemos isso, estamos enviando o evento para segundo

plano, então a tela que o fez fica em primeiro plano.

INTENT

Page 74: Desenvolvimento android

COMPONENTES

Transmissão de Intents:

- é usado o um objeto do tipo Context para enviar e os receptores adequados vão capturar

intent. Isso pode acontecer dada a categoria ou alguma permissão configurada nele.

- Quem recebe o intent é um BroadcastReceiver

public class nomedaclasse extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {

context.startService(new Intent(context, nomedaclasse.class));

}

}

}

INTENT

Page 75: Desenvolvimento android

COMPONENTES

- Um aplicativo canônico tem telas (activities) e mudanças entre elas (intents). Há situações

que precisamos manter alguma coisa em background….

- Uma tarefa em segundo plano (service) é tipicamente um processo que não envolve

interação direta do usuário ou de qualquer outra interface.

- Depois que um service é iniciado, ele só para em duas situações:

- parado explicitamente (no código em Java);

- é interrompido pelo sistema.

INTENT

Page 76: Desenvolvimento android

COMPONENTES

Pode ser de dois estados:

- Started: é iniciado através de um componente e fica para sempre. Mesmo se o chamador

for destruído. startService()

- Bound: permite que haja uma interação (tipo cliente-servidor) entre os componentes da

aplicação e o service. bindService()

SERVICE

Page 77: Desenvolvimento android

COMPONENTESSERVICE

Page 78: Desenvolvimento android

public class HelloService extends Service { /** Called when the service is being created. */ @Override public void onCreate() { }

/** The service is starting, due to a call to startService() */ @Override public int onStartCommand(Intent intent, int flags, int startId) { return mStartMode; }

/** A client is binding to the service with bindService() */ @Override public IBinder onBind(Intent intent) { return mBinder; }

COMPONENTES

SERVICE

Page 79: Desenvolvimento android

/** Called when all clients have unbound with unbindService() */ @Override public boolean onUnbind(Intent intent) { return mAllowRebind; }

/** Called when a client is binding to the service with bindService()*/ @Override public void onRebind(Intent intent) {

}

/** Called when The service is no longer used and is being destroyed */ @Override public void onDestroy() {

}}

COMPONENTES

SERVICE

Page 80: Desenvolvimento android

COMPONENTES

- Captura eventos do sistema

- Por exemplo: aviso de bateria baixa, fone de ouvido conectado, botão da câmera ligado,

conexão de wifi estabelecido, etc.

BROADCAST RECEIVER

Page 81: Desenvolvimento android

BROADCAST RECEIVERCOMPONENTES

- Usado para tratamento de eventos globais do telefone.

- os eventos são representados pela classe Intent;

- Lista: http://developer.android.com/reference/android/content/Intent.html

- Não possui interface do usuário;

- É tratado pelo onReceive

- O código deve ser pequeno. Curta duração. (*)

- Registro: estático ou dinâmico

@Override public void onReceive(Context context, Intent, intent) {….

}

Page 82: Desenvolvimento android

COMPONENTES

- Estático

- Dinâmico: Através do código em JavaIntent intent = new Intent();sendBroadcsast(intent);

< receiver android:name=“.NOME DA CLASSE”> <intent-filter> <action android:name=“…”> </intent-filter></receiver>

BROADCAST RECEIVER

Page 83: Desenvolvimento android

- Exemplo

- ao mudar o modo avião -> Avisar usuário.

public class TratarEvento extends BroadcastReceiver { final String aviao = "aviao"; @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.AIRPLANE_MODE")) Toast.makeText(context, aviao, Toast.LENGTH_LONG).show();

}}

<receiver android:name=".TratarEvento"> <intent-filter android:priority="10"> <action android:name="android.intent.action.AIRPLANE_MODE"> </action> </intent-filter> </receiver>

COMPONENTESBROADCAST RECEIVER

Page 84: Desenvolvimento android

- Exemplo

- ao mudar o modo avião -> Avisar usuário.

public class TratarEvento extends BroadcastReceiver { final String aviao = "aviao"; @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.AIRPLANE_MODE")) Toast.makeText(context, aviao, Toast.LENGTH_LONG).show();

}}

<receiver android:name=".TratarEvento"> <intent-filter android:priority="10"> <action android:name="android.intent.action.AIRPLANE_MODE"> </action> </intent-filter> </receiver>

COMPONENTESBROADCAST RECEIVER

Page 85: Desenvolvimento android

- Exemplo

- ao mudar o modo avião -> Avisar usuário.

public class TratarEvento extends BroadcastReceiver { final String aviao = "aviao"; @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.AIRPLANE_MODE")) Toast.makeText(context, aviao, Toast.LENGTH_LONG).show();

}}

<receiver android:name=".TratarEvento"> <intent-filter android:priority="10"> <action android:name="android.intent.action.AIRPLANE_MODE"> </action> </intent-filter> </receiver>

COMPONENTESBROADCAST RECEIVER

Page 86: Desenvolvimento android

- Exemplo

- ao mudar o modo avião -> Avisar usuário.

public class TratarEvento extends BroadcastReceiver { final String aviao = "aviao"; @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.AIRPLANE_MODE")) Toast.makeText(context, aviao, Toast.LENGTH_LONG).show();

}}

<receiver android:name=".TratarEvento"> <intent-filter android:priority="10"> <action android:name="android.intent.action.AIRPLANE_MODE"> </action> </intent-filter> </receiver>

COMPONENTESBROADCAST RECEIVER

Page 87: Desenvolvimento android

- Gerencia acesso à dados estruturados, com encapsulamento e segurança;

- É o formato padrão para o compartilhamento de dados entre processos (ContentResolver);

- Ex: audio, video, imagens, informação de contatos, etc.

COMPONENTESCONTENT PROVIDER

_ID NUMBER NUMBER_KEY LABEL NAME TYPE

1 (21)9999999 21999999 JOSÉ JOSÉ TYPE_WORK

2 (21)8888888 218888888 JOÃO JOÃO TYPE_HOME

Page 88: Desenvolvimento android

COMPONENTESCONTENT PROVIDER

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_principal);

outputText = (TextView) findViewById(R.id.Nome); fetchContacts(); }

Page 89: Desenvolvimento android

COMPONENTESCONTENT PROVIDER

public void fetchContacts() {

String phoneNumber = null; String email = null;

Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; String _ID = ContactsContract.Contacts._ID; String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME; String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;

Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID; String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;

Uri EmailCONTENT_URI = ContactsContract.CommonDataKinds.Email.CONTENT_URI; String EmailCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID; String DATA = ContactsContract.CommonDataKinds.Email.DATA;

Page 90: Desenvolvimento android

COMPONENTESCONTENT PROVIDER

public void fetchContacts() {

String phoneNumber = null; String email = null;

Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;

ContentResolver contentResolver = getContentResolver();

Cursor cursor = contentResolver.query(CONTENT_URI, null,null, null, null);

String name = cursor.getString(cursor.getColumnIndex( DISPLAY_NAME ));

String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;

Page 91: Desenvolvimento android

SENSORES E APIS

III

Page 92: Desenvolvimento android

ARQUIVO DE DADOS E ARMAZENAMENTO

● O Android pode ler e escrever de dois locais:○ armazenamento interno e externo;

// read a file, and put its contents into a TextView // (assumes hello.txt file exists in res/raw/ directory) // Interno

Scanner scan = new Scanner( getResources().openRawResource(R.raw.hello));

String allText = ""; // read entire file

while (scan.hasNextLine()) {

String line = scan.nextLine(); allText += line;

}

myTextView.setText(allText);

scan.close();

Page 93: Desenvolvimento android

ARQUIVO DE DADOS E ARMAZENAMENTO

//Externo//Android Manifest

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

// write short data to app-specific external storage

File outDir = getExternalFilesDir(null); // root dir File outFile = new File(outDir, "example.txt"); PrintStream output = new PrintStream(outFile); output.println("Hello, world!"); output.close(); // read list of pictures in external storage File picsDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);

for (File file : picsDir.listFiles()) { ... }

Page 94: Desenvolvimento android

BASE DE DADOS

● Android SQLlite Database

SQLiteDatabase db = openOrCreateDatabase( "name", MODE_PRIVATE, null);

db.execSQL("SQL query");

● métodos: ○ db.beginTransaction();○ db.endTransaction();○ db.delete("table", "whereClause" , args);○ db.deleteDatabase(file);○ db.insert("table", null, values);○ db.query(...);○ db.rawQuery("SQL query", args);○ db.replace("table", null, values); e ○ db.update("table", values, "whereClause", args).

Page 95: Desenvolvimento android

BASE DE DADOS

● ContentValues pode ser usado opcionalmente no lugar de comandos como INSERT, UPDATE, REPLACE○ permite que se use métodos de alto nível que se tornam mais claros do que

os utilizados na sintaxe SQL:

db.execSQL("INSERT INTO tableName (" + columnName1 + ", " + columnName2 + ") VALUES (" + value1 + ", " + value2 + ")");

ContentValues cvalues = new ContentValues(); cvalues.put("columnName1", value1); cvalues.put("columnName2", value2); ... db.insert("tableName", null, cvalues);

Page 96: Desenvolvimento android

BASE DE DADOS● Cursor permite que se intereja com os resultados, registro a registro.

○ Métodos:■ getBlob(index);■ getColumnCount();■ getColumnIndex(name);■ getColumnName(index);■ getCount();■ getDouble(index);■ getLong(index);■ getString(index);■ moveToPrevious(), dentre outros.

Cursor cursor = db.rawQuery("SELECT * FROM students");cursor.moveToFirst();do{

int id = cursor.getInt(cursor.getColumnIndex("id")); String email = cursor.getString( cursor.getColumnIndex("email")); ...

} while (cursor.moveToNext()); cursor.close();

Page 97: Desenvolvimento android

MEDIAPLAYER

● Para arquivos de som como .WAV, .MP3● Coloque o arquivo em app/src/main/res/raw● No código em Java:○ se refira ao arquivo como R.raw.filename■ não coloque as extensões;■ Carregue o arquivo de música:● MediaPlayer mp = MediaPlayer.create(this, R.

raw.filename);● mp.start();

Page 98: Desenvolvimento android

CÂMERA

● Android Manifest○ <uses-permission android:name="android.permission.CAMERA" />○ <uses-feature android:name="android.hardware.camera" android:required="true" />

private static final int REQ_CODE_TAKE_PICTURE = 90210; …Intent picIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(picIntent, REQ_CODE_TAKE_PICTURE); …@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

if (requestCode == REQ_CODE_TAKE_PICTURE && resultCode == RESULT_OK) {

Bitmap bmp = (Bitmap) intent.getExtras().get("data");ImageView img = (ImageView) findViewById(R.id.camera_image);iimg.setImageBitmap(bmp);

}}

Page 99: Desenvolvimento android

GRÁFICO 2D, ANIMAÇÕES E JOGOS

● Android Manifest○ <uses-permission android:name="android.permission.CAMERA" />○ <uses-feature android:name="android.hardware.camera" android:required="true" />

private static final int REQ_CODE_TAKE_PICTURE = 90210; …Intent picIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(picIntent, REQ_CODE_TAKE_PICTURE); …@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

if (requestCode == REQ_CODE_TAKE_PICTURE && resultCode == RESULT_OK) {

Bitmap bmp = (Bitmap) intent.getExtras().get("data");ImageView img = (ImageView) findViewById(R.id.camera_image);iimg.setImageBitmap(bmp);

}}

Page 100: Desenvolvimento android

MAPAS● Instalar o Google Play services○ SDK Manager → Extras → Google Play services (check box) – clica em Install packages…

● Adiciona o Google Play para o projeto no arquivo build.gradle

dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3'compile 'com.google.android.gms:play-services:6.5.87'

}

● Pegue a chave API do Google (https://code.google.com/apis/console/)

● Altere o Android Manifest

Page 101: Desenvolvimento android

MAPAS● Acrescente na interface

Page 102: Desenvolvimento android

MAPAS● … e na classe Java

Page 103: Desenvolvimento android

INTRODUÇÃO CLOUD COMPUTING

IV

Page 104: Desenvolvimento android

O que é Cloud Computing?

Também conhecido no Brasil como Computação nas Nuvens, se refere, à idéia de utilizarmos em qualquer lugar as mais variadas aplicações através da internet com a mesma facilidade de tê-las instaladas em nossos próprios computadores.

Cloud Computing é baseado em uma coleção de muitos antigos e alguns novos conceitos em diversos campos de pesquisa como SOA(Service Oriented Architecture), computação distribuída e grid, bem como a virtualização.[Youseff et al., 2010]

Page 105: Desenvolvimento android

� Serviços de e-mail

� Editores de texto online

Page 106: Desenvolvimento android

INTERNET: O FUNDAMENTO PRINCIPAL� “Eu diria que o computador do futuro é a

internet. Hoje, se você tem um problema no computador, está tudo perdido, é terrível. Mas, com a computação nas nuvens, não importa se você usa o celular, o computador ou qualquer outro aparelho, tudo estará guardado na internet”.

Eric SchmidtPresidente do Google

Page 107: Desenvolvimento android

Modelos de Serviços baseados em Cloud Computing oferecidos atualmente no mercado de TI:

•Integration-as-a-service

•BPM-as-a-service

•Security-as-a-service

•Anti-vírus-as-a-service

•Software-as-a-service

•Management/governance-as-a-service

•Testing-as-a-service

•Infrastructure-as-a-service

•Storage-as-a-service

•Backup-as-a-service

•Database-as-a-service

•Information-as-a-service

•Process-as-a-service

•Application-as-a-service

•Platform-as-a-service

Page 108: Desenvolvimento android

Os 3  Modelos de Serviço de Cloud Computing mais Fornecidos no Mercado Mundial

Page 109: Desenvolvimento android

ARQUITETURA (ZHANG, CHENG, BOUTABA)

Page 110: Desenvolvimento android
Page 111: Desenvolvimento android
Page 112: Desenvolvimento android
Page 113: Desenvolvimento android
Page 114: Desenvolvimento android
Page 115: Desenvolvimento android
Page 116: Desenvolvimento android

Software as a Service (SaaS)Software como um serviço

Trata-se de uma forma de trabalho onde o software é oferecido como serviço, assim, o usuário não precisa adquirir licenças de uso para instalação ou mesmo comprar computadores ou servidores para executá-lo.

Nessa modalidade, no máximo paga-se um valor periódico - como se fosse uma assinatura - somente pelos recursos que utilizar e/ou pelo tempo de uso.

Page 117: Desenvolvimento android

Software as a Service (SaaS)

Suponha que uma empresa de pequeno porte necessita de um software para gerar folhas de pagamento. Há várias soluções prontas para isso no mercado, no entanto, a empresa terá que comprar licenças de uso do software escolhido e, dependendo do caso, até mesmo hardware para executá-lo.

A empresa pode encontrar uma fornecedora de software para folhas de pagamento que trabalha com o modelo SaaS, e pagar apenas. pelo número de usuários e/ou pelo tempo de uso.

Além disso, hardware, instalação, atualização, manutenção da aplicação, entre outros, ficam por conta do fornecedor.

Page 118: Desenvolvimento android

IaaS - Infrastructure as a Service

Um ambiente completo e gerenciado. o IaaS, oferece:

Page 119: Desenvolvimento android

AMAZON, GOOGLE E MICROSOFT

V

Page 120: Desenvolvimento android

HISTÓRICO, MOTIVAÇÃO E CENÁRIONo Google, as paralelizações nos algoritmos eram feitas caso a caso. Em cada caso, problemas comuns a todas as paralelizações tinham de ser resolvidos.Como fazer um modelo de paralelizações que não necessite de novas implementações para cada caso?

Page 121: Desenvolvimento android

O MODELO MAPREDUCEAbstração que permite que o usuário seja isolado da camada de paralelização.A paralelização depende da implementação do modelo MapReduce. Na implementação que devem estar garantidas as propriedades do sistema (integridade, disponibilidade, controle de acesso, não-repúdio, confidencialidade, autenticação e privacidade).

Page 122: Desenvolvimento android

A IMPLEMENTAÇÃO DO GOOGLE• Características dos cluster’s disponíveis:• Dispositivos de rede e processamento comuns

(x86 dual-core, discos IDE);• Cluster com centenas ou milhares de nós.• Sistema de arquivos distribuído próprio, o GFS

Page 123: Desenvolvimento android

A IMPLEMENTAÇÃO DO GOOGLE• Usuário implementa as funções map e reduce

e chama uma função MapReduce dentro do próprio programa

• A implementação fragmenta o arquivo de entrada do usuário (64 MB/parte)

• As funções map e reduce são copiadas para os nós do cluster

• Mestre X trabalhadores

Page 124: Desenvolvimento android

A IMPLEMENTAÇÃO DO GOOGLE• O mestre: tarefas a trabalhadores ociosos. • Trabalhadores mappers recebem um

fragmento do arquivo de entrada cada, extraem uma chave e valor dele e chamam a função map.

• Pares intermediários ficam guardados na memória

• Escritos em disco periodicamente• Mestre toma nota dos locais dos pares

intermediários.

Page 125: Desenvolvimento android

A IMPLEMENTAÇÃO DO GOOGLE• O mestre designa um nó para a tarefa de

reduce com os locais dos valores intermediários da sua chave.

• O nó de redução lê todos os valores intermediários relacionados àquela chave intermediária e chama a função reduce, que é executada e escreve em um arquivo de saída o resultado final da execução.

• Implementação retorna ao programa do usuário

Page 126: Desenvolvimento android

A IMPLEMENTAÇÃO DO GOOGLE

Figura 3 – Esquema da implementação da Google®

Page 127: Desenvolvimento android

HADOOP• Uma implementação de código aberto do

modelo MapReduce• Utiliza interfaces Java para o programador

implementar as funções map e reduce.• Muito parecido com a implementação do

Google, mas é flexível com relação às máquinas em que roda.

Page 128: Desenvolvimento android

AMAZON EC2

–pioneira no mercado da computação em nuvem;

–disponibilização de máquinas virtuais individuais, conhecidas como instâncias, com uma interface de controle baseada em Webservices que visam gerar o maior controle com a menor dificuldade;

–é a mais heterogênea em termos de sistemas operacionais e softwares;

Page 129: Desenvolvimento android

AMAZON EC2–As instâncias do EC2 também variam quanto ao nível do hardware (processador, arquitetura, memória física e virtual) sendo classificada em pequena, grande e extragrande;

–plataforma é composta por uma série de funcionalidades:

–CloudWatch: Webservice que permite aos clientes monitorarem em tempo real todos os recursos da instância como hardware e rede;

–Escalonamento Automático: permite a mudança automática de recursos de hardware para adaptar a instâncias a mudanças no trafego da rede; e

–Endereço IP Elástico: permite de mapeamento de um endereço IP para uma ou várias instâncias de forma fácil e imediata, sem a necessidade de espera de propagação de DNS.

Page 130: Desenvolvimento android

MICROSOFT AZURE

– plataforma de computação em nuvens da Microsoft;

–integrações entre aplicativos locais e publicados na nuvem;

–armazenamento relacional;

–utilização dos serviços live;e

–acesso aos sites pelos mais variados tipos de dispositivos

Page 131: Desenvolvimento android

MICROSOFT AZURE

–Web: interface da aplicação; e

–Worker: responsável por armazenar a regra de negócio ou computacional.

Page 132: Desenvolvimento android

MICROSOFT AZURE

–Azure Services: Série de aplicativos disponibilizados pela Microsoft, prontos para serem adquiridos e utilizados sem a necessidade de implementação.

–Composto de: –Live Services: também conhecido como Live Mesh, é um serviço de sincronização de dados dos usuários;

–SharePoint Services: portal de colaboração voltado para intranets; CRM (Customer Relationship Managment): plataforma de relacionamento com o cliente;

–.Net Services: serviços para integração, controle de acesso e fluxo de trabalho para as aplicações desenvolvidas.

Page 133: Desenvolvimento android

GOOGLE APP ENGINE

– plataforma de desenvolvimento que permite que os aplicativos Web nele publicados sejam disponibilizados na infraestrutura do Google;

–trabalha sobre um sistema de cotas por desenvolvedor para o qual é possível disponibilizar gratuitamente até dez aplicações com 500MB de limite de armazenamento e cinco milhões de visitação por mês; e

–disponibiliza uma série de APIs de integração com serviços já existentes do Google e outros exclusivos para os assinantes.

Page 134: Desenvolvimento android

GOOGLE APP ENGINE

Page 135: Desenvolvimento android

OBRIGADOBOA-SORTE!