39
Programação Para Dispositivos Moveis Prof. Charles Fortes PDM Pitágoras

Pdm -final

Embed Size (px)

Citation preview

Page 1: Pdm  -final

Programação Para Dispositivos MoveisProf. Charles Fortes

PDM

Pitágoras

Page 2: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Charles Fortes

Pitágoras

Page 3: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Charles FortesLíder Técnico na Empresa Prime Systems. Agilista, apaixonado por desenvolvimento (Web, Desktop, Mobile, o que for), pai, amante do Paintball e do Kenjutsu. MTAC - Microsoft Technical Audience Contributor 100Loop - DotNetRaptors

Pitágoras

Page 4: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Charles FortesLíder Técnico na Empresa Prime Systems. Agilista, apaixonado por desenvolvimento (Web, Desktop, Mobile, o que for), pai, amante do Paintball e do Kenjutsu. MTAC - Microsoft Technical Audience Contributor 100Loop - DotNetRaptors

SlideShare: http://pt.slideshare.net/charleswellingtonfortesLinkedin: http://br.linkedin.com/in/charlesfortes/Twitter: @CharlesFortes

Pitágoras

Page 5: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Charles FortesLíder Técnico na Empresa Prime Systems. Agilista, apaixonado por desenvolvimento (Web, Desktop, Mobile, o que for), pai, amante do Paintball e do Kenjutsu. MTAC - Microsoft Technical Audience Contributor 100Loop - DotNetRaptors

Desenvolvimento Web – MVC – Angular.JS – JQuery – SQLServer – MySQL – HTML5 – NoSQL

Pitágoras

Page 6: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Android Manifest

Pitágoras

Page 7: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Manifest

 tem a função de ser o principal arquivo de configuração do seu aplicativo

- Icone- Nome- Telas- Permissões- Dominio

Pitágoras

Page 8: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Layout

Pitágoras

Page 9: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Layout

A arquitetura de interface gráfica do Android é baseada no padrão de projetos MVC (Model – View – Controller).

Onde a camada Model, é responsável pelas regras de negócio da aplicação. A Camada de View, é responsável pela interface gráfica. E a camada de Controller gerencia os eventos de uma determinada tela.

A grande vantagem proporcionada por este padrão é a modularidade. Ou seja, conseguimos alterar todo um layout de uma determinada tela sem mexer no código que diz respeito ao comportamento da mesma.

Pitágoras

Page 10: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Layout

Imaginando uma tela de login, a cor da tela, o tamanho e a fonte dos botões, tudo que diz respeito a interface gráfica é definido na camada View.

Já o que irá acontecer quando os botões forem clicados será ministrado pela camada de Controller.

No Android, os layouts XML assumem o papel de View.

As Activitys assumem o papel de Controller.

E a classe R, faz a ligação entre as duas camadas, permitindo o acesso de recursos encontrados na pasta Res nas Activitys do projeto.

Pitágoras

Page 11: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Layout

Nota: Você pode criar componentes gráficos diretamente na Activity, sem a necessidade da criação de um layout.xml. No entanto a modularidade citada acima seria perdida.

Pitágoras

Page 12: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

LayoutLinearLayout: Este ViewGroup é um dos mais populares. Irá organizar os componentes com base na sua característica orientation.

A tag orientation pode receber vertical ou horizontal.

Caso o orientation estiver configurado como vertical, os componentes serão exibidos um em cima do outro.

Caso esteja horizontal, os componentes serão exibidos um ao lado do outro.

TableLayout: Esse layout organiza os componentes no formato de tabelas. Colunas e linhas.

RelativeLayout: Esse layout organiza os componentes de um modo mais livre. A definição de onde o componente vai ficar, será definida no própria View.

Pitágoras

Page 13: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Activities

Pitágoras

Page 14: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

ActivityA parte comportamental, como ações de um botão ficam a cargo do Controller no caso do Android representado pela classe Activity.

Sobrescrevemos o método onCreate da Activity, é nele que vincularemos o layout xml que criamos anteriormente.

Pitágoras

Page 15: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

ActivityPitágoras

123456789

public class ExemploActivity extends Activity {     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.exemplo_layout);    }     }

Page 16: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

ActivityToda Activity é criada, fica em contato com o usuário, em algum momento pode ser interrompida (como em um telefonema), em seguida pode ser restaurada ou destruída.

Este é o ciclo de vida de uma Activity, e cada etapa descrita acima é marcada por um método.Assim que uma Activity é criada, o método onCreate(Bunde instanceSaved) é acionado. É neste momento que o desenvolvedor deve criar a interface gráfica que irá ficar em contato com o usuário.Daí a necessidade de chamar o método setContentView neste ponto, pois é ele que faz o vinculo do Layout.xml com a Activity.

Quando uma Activity é totalmente destruída o método onDestroy() é acionado. Este é o momento ideal para a liberação dos recursos que estavam sendo consumidos pela Activity.

Por exemplo: Caso esta Activity esteja exibindo um vídeo via streaming por exemplo, este é o momento de cancelar a conexão e liberar o consumo de memória realizada pelo visualizador de vídeo.

Pitágoras

Page 17: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Classe R

Pitágoras

Page 18: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

R

Responsável pelo acesso aos resources do projeto, sejam eles imagens, strings, ids, etc.

Pitágoras

Page 19: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Intents

Pitágoras

http://developer.android.com/intl/pt-br/guide/components/intents-filters.html

Page 20: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Intents

Intents são declarações de intenções para o sistema do dispositivo, que pode ser usada dentre outras coisas, desde uma simples troca de tela, acesso a um componente do dispositivo ou a outros aplicativos.

Pitágoras

Page 21: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Intents

Intent intent = new Intent(this, OutraAtividade.class); startActivity(intent);

------------------------------------

Uri uri = Uri.fromFile(new File("/sdcard/minhaaplicacao/hello_camera.jpg")); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivity(intent);

Pitágoras

Page 22: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

URIhttps://pt.wikipedia.org/wiki/URI

A URI (um objeto Uri) que referencia os dados a serem aproveitados e/ou o tipo MIME desses dados. O tipo dos dados fornecidos geralmente é determinado pela ação da intenção.

Ao criar uma intenção, em geral, é importante especificar o tipo de dados (seu tipo MIME) em adição à URI.

Pitágoras

Page 23: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

URIhttps://pt.wikipedia.org/wiki/URI

A sintaxe URI é essencialmente um nome de conjunto URI como "HTTP", "FTP", "mailto", "URN", "tel", "rtsp", "file" etc, seguido de um caractere dois pontos e, por fim, a parte específica do conjunto.

Exemplos de URIs Absolutas[editar | editar código-fonte]• http://example.org/absolute/URI/with/absolute/path/to/resource.txt• ftp://example.org/resource.txt• file:////home/example/example.org/resource.txt• urn:issn:1535-3613

Pitágoras

Page 24: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Extras - Bundles

Pares de valores-chave que carregam informações adicionais exigidas para realizar a ação solicitada. Assim, como algumas ações usam determinados tipos de URIs de dados, outras também usam determinados extras.

É possível adicionar dados extras com diversos métodos putExtra(), cada um aceitando dois parâmetros: o nome principal e o valor. Também é possível criar um objeto Bundle com todos os dados extras e, em seguida, inserir o Bundle na Intent com putExtras().

Pitágoras

Page 25: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Extras - Bundles

Por exemplo: ao criar uma intenção para enviar um e-mail com ACTION_SEND, é possível especificar o recipiente "para" com a chave EXTRA_EMAIL e especificar o "assunto" com a chave EXTRA_SUBJECT.

A classe Intent especifica diversas constantes EXTRA_* para tipos de dados padronizados. Se for necessário declarar chaves extras (para intenções que seu aplicativo receba), certifique-se de incluir o nome do pacote do aplicativo como prefixo. Por exemplo:

Pitágoras

Page 26: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Conexão com o Banco

Pitágoras

https://developer.android.com/training/basics/data-storage/databases.html#DeleteDbRow

Page 27: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLite

Um dos princípios mais importantes de bancos de dados do SQL é o esquema: uma declaração formal de como o banco de dados é organizado. O esquema é refletido nas declarações SQL usadas na criação do banco de dados

Pitágoras

Page 28: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLite

Um conjunto de APIs está disponível na classe SQLiteOpenHelper. Ao usar esta classe para obter referências para seu banco de dados, o sistema realiza operações de possível longa execução para criar e atualizar o banco de dados apenas quando necessário e não durante a inicialização do aplicativo. Basta chamar getWritableDatabase() ou getReadableDatabase().

Pitágoras

Page 29: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLitePitágoras

public HeroRepository(Context context){

ConexaoHelper cn = new ConexaoHelper(context);

db = cn.getWritableDatabase();

}

Page 30: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLite

Para usar SQLiteOpenHelper, crie uma subclasse que substitua os métodos de retorno de chamada onCreate(), onUpgrade() e onOpen(). Também é possível implementar onDowngrade(), mas não é obrigatório.

Pitágoras

Page 31: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLitePitágoras

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;

/*** Created by charles.fortes on 11/05/2016.*/public class ConexaoHelper extends SQLiteOpenHelper {

public ConexaoHelper(Context context) {super(context, "DBMarvel", null, 1);}

@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("Create table herois (nome text, poder text)");}

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("drop table herois");onCreate(db);}}

Page 32: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLiteexecSQL

executa um comando que não retorna resultado

rawQueryrecupera um cursor com os dados

Métodos da Canexão para Facilitar a Vida:Insert Update Delete Query

db.insert("herois",null, valores); dataBase.delete(NOME_TABELA, COLUNA_ID + " = ?",

valoresParaSubstituir);dataBase.update(NOME_TABELA, valores, COLUNA_ID + " = ?",

valoresParaSubstituir);

Pitágoras

Page 33: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLite

Cursor: Utilizado para percorrer os resultados da consulta e recuperar os itens

ContentValues: Lista de Chaves e Valores para Passagem de Parâmetros

Pitágoras

ContentValues values = new ContentValues();values.put(COLUNA_MARCA, veiculo.getMarca());values.put(COLUNA_MODELO, veiculo.getModelo());values.put(COLUNA_PLACA, veiculo.getPlaca());

Page 34: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

SQLitePitágoras

private List<Veiculo> construirVeiculoPorCursor(Cursor cursor) {

List<Veiculo> veiculos = new ArrayList<Veiculo>();if(cursor == null)return veiculos;

try {

if (cursor.moveToFirst()) {do {

int indexID = cursor.getColumnIndex(COLUNA_ID);int indexMarca = cursor.getColumnIndex(COLUNA_MARCA);int indexModelo = cursor.getColumnIndex(COLUNA_MODELO);int indexPlaca = cursor.getColumnIndex(COLUNA_PLACA);

int id = cursor.getInt(indexID);String marca = cursor.getString(indexMarca);String modelo = cursor.getString(indexModelo);String placa = cursor.getString(indexPlaca);

Veiculo veiculo = new Veiculo(id, marca, modelo, placa);

veiculos.add(veiculo);

} while (cursor.moveToNext());}

} finally {cursor.close();}return veiculos;}

Page 35: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Listas

Pitágoras

Page 36: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

ListasPitágoras

List<Heroi> avengers = repositorio.Listar();

List<String> valoresDaLista = new ArrayList<String>();

for(int i = 0; i < avengers.size(); i++) {valoresDaLista.add("Nome: " + avengers.get(i).nome+ " Poder: " + avengers.get(i).poder);}

ArrayAdapter<String> adapter= new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,android.R.id.text1,valoresDaLista);

listView.setAdapter(adapter);

Page 37: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Notificações

Pitágoras

Page 38: Pdm  -final

Programação Orientada a ObjetosProf. Charles Fortes

Notificationsprivate static void showNotification(String title, String message) {

NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context.getApplicationContext()).setSmallIcon(drawable).setPriority(Notification.PRIORITY_HIGH).setContentTitle(title).setContentText(message).setWhen(0).setTicker(context.getString(R.string.app_name));

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

notificationBuilder.setContentText(message);

notificationBuilder.setContentIntent(pendingIntent );

Notification notification = notificationBuilder.build();

manager.notify(notificationId, notification);}

Pitágoras

Page 39: Pdm  -final

Programação Orientada a Objetos

Prof. Charles Fortes

Dúvidas?

Pitágoras