O documento discute programação para dispositivos móveis, com foco em programação orientada a objetos no Android. Apresenta conceitos como manifest, layouts, activities, classe R, intents, conexão com banco de dados SQLite, listas e notificações.
Programação Orientada aObjetos
Prof. Charles Fortes
Charles Fortes
Lí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
4.
Programação Orientada aObjetos
Prof. Charles Fortes
Charles Fortes
Lí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/charleswellingtonfortes
Linkedin: http://br.linkedin.com/in/charlesfortes/
Twitter: @CharlesFortes
Pitágoras
5.
Programação Orientada aObjetos
Prof. Charles Fortes
Charles Fortes
Lí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
Programação Orientada aObjetos
Prof. 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
Programação Orientada aObjetos
Prof. 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
10.
Programação Orientada aObjetos
Prof. 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
11.
Programação Orientada aObjetos
Prof. 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
12.
Programação Orientada aObjetos
Prof. Charles Fortes
Layout
LinearLayout: 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
Programação Orientada aObjetos
Prof. Charles Fortes
Activity
A 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
15.
Programação Orientada aObjetos
Prof. Charles Fortes
Activity
Pitágoras
1
2
3
4
5
6
7
8
9
public class ExemploActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.exemplo_layout);
}
}
16.
Programação Orientada aObjetos
Prof. Charles Fortes
Activity
Toda 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
Programação Orientada aObjetos
Prof. Charles Fortes
R
Responsável pelo acesso aos resources do projeto, sejam eles imagens, strings, ids, etc.
Pitágoras
19.
Programação Orientada aObjetos
Prof. Charles Fortes
Intents
Pitágoras
http://developer.android.com/intl/pt-br/guide/components/intents-filters.html
20.
Programação Orientada aObjetos
Prof. 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
21.
Programação Orientada aObjetos
Prof. 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
22.
Programação Orientada aObjetos
Prof. Charles Fortes
URI
https://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
23.
Programação Orientada aObjetos
Prof. Charles Fortes
URI
https://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
24.
Programação Orientada aObjetos
Prof. 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
25.
Programação Orientada aObjetos
Prof. 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
26.
Programação Orientada aObjetos
Prof. Charles Fortes
Conexão com o Banco
Pitágoras
https://developer.android.com/training/basics/data-storage/databases.html#DeleteDbRow
27.
Programação Orientada aObjetos
Prof. 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
28.
Programação Orientada aObjetos
Prof. 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
29.
Programação Orientada aObjetos
Prof. Charles Fortes
SQLite
Pitágoras
public HeroRepository(Context context){
ConexaoHelper cn = new ConexaoHelper(context);
db = cn.getWritableDatabase();
}
30.
Programação Orientada aObjetos
Prof. 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
31.
Programação Orientada aObjetos
Prof. Charles Fortes
SQLite
Pitá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);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("Create table herois (nome text, poder text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table herois");
onCreate(db);
}
}
32.
Programação Orientada aObjetos
Prof. Charles Fortes
SQLite
execSQL
executa um comando que não retorna resultado
rawQuery
recupera 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
33.
Programação Orientada aObjetos
Prof. 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());
34.
Programação Orientada aObjetos
Prof. Charles Fortes
SQLite
Pitá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;
}