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.
3. Programação Orientada a Objetos
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 a Objetos
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 a Objetos
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
7. Programação Orientada a Objetos
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
9. Programação Orientada a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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
14. Programação Orientada a Objetos
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 a Objetos
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 a Objetos
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
18. Programação Orientada a Objetos
Prof. Charles Fortes
R
Responsável pelo acesso aos resources do projeto, sejam eles imagens, strings, ids, etc.
Pitágoras
19. Programação Orientada a Objetos
Prof. Charles Fortes
Intents
Pitágoras
http://developer.android.com/intl/pt-br/guide/components/intents-filters.html
20. Programação Orientada a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
Prof. Charles Fortes
SQLite
Pitágoras
public HeroRepository(Context context){
ConexaoHelper cn = new ConexaoHelper(context);
db = cn.getWritableDatabase();
}
30. Programação Orientada a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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 a Objetos
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;
}