Upload
charles-fortes
View
281
Download
0
Embed Size (px)
Citation preview
Programação Para Dispositivos MoveisProf. Charles Fortes
PDM
Pitágoras
Programação Orientada a ObjetosProf. Charles Fortes
Charles Fortes
Pitágoras
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
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
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
Programação Orientada a ObjetosProf. Charles Fortes
Android Manifest
Pitágoras
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
Programação Orientada a ObjetosProf. Charles Fortes
Layout
Pitágoras
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
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
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
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
Programação Orientada a ObjetosProf. Charles Fortes
Activities
Pitágoras
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
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); } }
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
Programação Orientada a ObjetosProf. Charles Fortes
Classe R
Pitágoras
Programação Orientada a ObjetosProf. Charles Fortes
R
Responsável pelo acesso aos resources do projeto, sejam eles imagens, strings, ids, etc.
Pitágoras
Programação Orientada a ObjetosProf. Charles Fortes
Intents
Pitágoras
http://developer.android.com/intl/pt-br/guide/components/intents-filters.html
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
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
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
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
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
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
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
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
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
Programação Orientada a ObjetosProf. Charles Fortes
SQLitePitágoras
public HeroRepository(Context context){
ConexaoHelper cn = new ConexaoHelper(context);
db = cn.getWritableDatabase();
}
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
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);}}
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
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());
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;}
Programação Orientada a ObjetosProf. Charles Fortes
Listas
Pitágoras
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);
Programação Orientada a ObjetosProf. Charles Fortes
Notificações
Pitágoras
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
Programação Orientada a Objetos
Prof. Charles Fortes
Dúvidas?
Pitágoras