Dr. prof.sylvio@fatecriopreto.edu.br
Conteúdo: 1) Introdução ao Android e Mercado de Dispositivos Móveis; 2) Plataforma: 2.1) Arquitetura; 2.2) Framework; 2.3) Bibliotecas; 2.4) Android Runtime; 2.5) Linux Kernel; 3) Recursos Android; 4) Elementos da Aplicação; 5) Kit de Desenvolvimento (SDK); 6) Projeto Exemplo: - Primeiro Exemplo Aplicação Básica; - Segundo Exemplo Interação com o Usuário; - Terceiro Exemplo - Utilização de mais de uma Activity; - Permissões de Segurança; - Trocando informações entre Activitys; - Criando uma Intent; - Criando E-mail; - Componente de Imagens;
1) Introdução ao Android e Mercado de Dispositivos Móveis - A previsão para 2013 é de 5,6 Bilhões de usuários de aparelhos celulares; (fonte: Pereira, Silva, Android para Desenvolvedores ) - O Brasil é o 6º (de 186) no ranking de países com mais usuários; (fonte: World Development Indicators database) - Serviços (GPS, Internet etc) - Hardware Robusto (p. ex. Samsung Galaxy SII 1.5GHz Dualcore, 1GB RAM)
1) Introdução ao Android e Mercado de Dispositivos Móveis OHA: Open Handset Alliance
1) Android - Sistema Operacional Móvel adquirido em 2005 pela Google; - Kernel Linux 2.6 (não é uma distribuição tradicional); - Permite implementação em Java; - Open Source; - Máquina Virtual Dalvik; - Android Market;
1) Android Fonte: (http://developer.android.com/resources/dashboard/platform-versions.html)
2) Plataforma Android
2) Plataforma - Applications: (Aplicativos) Por exemplo: Software de controle de E-mail, Mapas, Navegadores, Calendários, Softwares para SMS, Agendas etc; - Framework: Nesta camada estão as APIs e recursos, por exemplo as classes visuais, View system, o Content Provider (acesso a softwares de terceiros), gerenciador de localização (GPS ou Cell ID), gerenciador de notificação e Location, Bluetooth, Wi-fi, USB e Sensor Service,. Os principais elementos são: - Activity Manager: Gestor das Activitys; - Package Manager: Gestor dos Pacotes de Instalação; - Windows Manager: Gerencia atividade das Janelas; - Content Provider: Compartilhamento e troca de dados; - View System: Disponibiliza o tratamento Gráfico;
2) Plataforma - Libraries: (Bibliotecas) Contempla bibliotecas para gráficos 2D e 3D, SQLite, Webkit (Renderizador CSS, AJAX e DOM). - Android Runtime: (Ambiente de Execução). É uma instância da VM Dalvik para cada aplicação executada. A Dalvik executa arquivos do tipo DEK (Dalvik Executable). - Linux Kernel: Versão 2.6 do núcleo do Linux com suporte ao gerenciamento de energia para os dispositivos móveis.
3) Recursos - Framework de Aplicação; - Máquina Dalvik; - Navegador Web Integrado (engine Webkit); - Gráficos Otimizados (OpenGL ES 1.0); - SQLite (SGBDR); - Suporte Multimídia (MP3, AAC, AMR, MPEG4, H264, JPG, PNG); - Telefonia GSM; - Protocolos Wireless (Bluetooth, Wi-fi, 3G, EDGE); - Hardwares diversos (Câmera, GPS, Bússola, Acelerômetro); - Linguagem e Ambiente de desenvolvimento (JAVA, Eclipse, NetBeans etc)
4) Elementos da Aplicação Activities Services Broadcast Receivers Content Providers Intents e Intents Filters
4) Elementos da Aplicação Content Providers - Forma de compartilhamento de dados; - Entre aplicações e aplicações; - Entre aparelhos e aparelhos;
4) Elementos da Aplicação Activities - É a interface com o Usuário, composto por Views; - É a especialização de uma classe Activity; - Possui os métodos: OnCreate(), OnStart(), OnResume(), OnPause(), OnStop(), OnDestroy(), OnRestart() e OnFreeze();
Activities
4) Elementos da Aplicação Services - Códigos sem Interface (Background); - Não são interrompidos quando se troca de Activity; - Não tem um ciclo de vida estruturado, dependem de uma ordem ;
4) Elementos da Aplicação Broadcast Receivers - Trata a reação a um evento externo, por exemplo uma Intent; - Exemplo: 1) Quando o telefone tocar; 2) Quando existirem redes Wireless disponíveis; 3) Determinado horário; - Não apresenta interface gráfica; - A aplicação não precisa estar ativa para que o Brod. Rec. Possa ser acionado.
4) Elementos da Aplicação Intents e Intents Filters - São mensagens assíncronas; - É um objeto que carrega diferentes tipos de conteúdos: - Ex 1. Pedido para mostrar uma foto; - Ex 2. Anunciar que a bateria está descarregada; - As Intents Filters servem para descrever quais Intents uma Activity ou BroadCast Receiver são capazes de tratar;
5) Kit de Desenvolvimento a) Android Virtual Device (AVD) - Emulador; b) Android Development Tool (ADT); c) Dalvik Debug Monitor Service (DDMS);
5) Kit de Desenvolvimento a) Android Virtual Device (AVD) - Emulador; - Possibilita testar os códigos em um ambiente de simulação; - Todas as funcionalidades estão disponíveis: Ex. Internet e SMS; - Configuração de diversas versões; - Problemas: - Não há suporte a Gestor de Bateria; - Não acessa a USB; - Simulação de Bluetooth;
5) Kit de Desenvolvimento b) Android Development Tool (ADT); - É um plugin para Eclipse que facilita o desenvolvimento; - Facilita a criação de projetos; - Gera automaticamente o pacote apk; - Editores XML customizados; - Desenvolvimento com interface gráfica;
5) Kit de Desenvolvimento c) Dalvik Debug Monitor Service (DDMS): - Depuração das aplicações; - Simulação de SMS e dados de localização; - Compatível com o ADT;
6) Projeto de Exemplo - Primeiro Projeto: Este exemplo trata-se de uma aplicação que irá escrever na tela, Primeiro Exemplo. - Sua função é verificar todo o procedimento de desenvolvimento envolvendo as partes básicas de uma aplicação: 1) Activity + View; 2) Classe R; 3) AndroidManifest.xml 4) Compilando e Testando
6) Projeto de Exemplo 1) Activity + View;
6) Projeto de Exemplo 1) Activity + View; package meupacote.primeiroprojeto; import android.app.activity; import android.os.bundle; public class PrimeiroProjetoActivity extends Activity { } @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } Definição da Interface Gráfica main.xml ** gerado automaticamente
6) Projeto de Exemplo 1) Activity + View (main.xml) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
6) Projeto de Exemplo 1) Activity + View (string.xml) android:text="@string/hello" <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">hello World, PrimeiroProjetoActivity!</string> <string name="app_name">primeiroprojeto</string> </resources>
6) Projeto de Exemplo 2) Classe R - Gerada automaticamente; - As constantes utilizadas no projeto estão declaradas na Classe R; - Cada componente tem uma respectiva declaração na Classe R; - Não deve ser editado manualmente;
6) Projeto de Exemplo 3) AndroidManifest.xml - Localizado na pasta raiz do projeto; - Semelhante ao arquivo web.xml para aplicações WEB; - Cada Activity deve estar declarada dentro do arquivo; - Estabelece qual a principal Intent será executada: android.intent.action.main android.intent.category.launcher
6) Projeto de Exemplo 3) AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="meupacote.primeiroprojeto" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".primeiroprojetoactivity" > <intent-filter > <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest>
6) Projeto de Exemplo 4) Compilando e Testando - Basta acessar a opção RUN ;
6) Projeto de Exemplo - Segundo Projeto: O Objetivo deste projeto é estudar a interação com ações do usuário e log de depuração. - Interface OnClickListener (android.view.view.onclicklistener); - Componentes: 1) TextView; 2) EditText; 3) Button;
6) Projeto de Exemplo (Segundo Projeto) TextView EditText Button
6) Projeto de Exemplo (Segundo Projeto) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textviewdigiteseunome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="digite seu nome:" /> <EditText android:id="@+id/edittextcamponome" android:layout_width="match_parent" android:layout_height="wrap_content" > </EditText> <Button android:id="@+id/buttonok" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="ok" /> <TextView android:id="@+id/textviewsaida" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:textappearance="?android:attr/textappearancelarge" /> </LinearLayout>
6) Projeto de Exemplo (Segundo Projeto) package meupacote.segundoprojeto; public class SegundoProjetoActivity extends Activity implements OnClickListener { EditText textnome; TextView textresultado; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); textnome = (EditText) findviewbyid(r.id.edittextcamponome); textresultado = (TextView) findviewbyid(r.id.textviewsaida); Button botao = (Button) findviewbyid(r.id.buttonok); botao.setonclicklistener(this); } @Override public void onclick(view v) { textresultado.settext("olá "+textnome.gettext()); Log.d("Categoria - Projeto 2", textnome.gettext().tostring()); } }
6) Projeto de Exemplo (Segundo Projeto) - LogCat: - Similar ao System.out. - Log.v: Verbose (preto) - Log.d: Debug (azul) - Log.i: Informação (verde) - Log.w: Alerta (laranja) - Log.e: Erro (vermelho) - Recebe 2 parâmetros String: 1) Categoria; 2) Mensagem;
6) Projeto de Exemplo (Segundo Projeto)
6) Projeto de Exemplo (Terceiro Exemplo) - Utilização de mais de uma Activity; - Permissões de Segurança; - Trocando informações entre Activitys; - Criando uma Intent; - Criando E-mail;
6) Projeto de Exemplo (Terceiro Exemplo) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableLayout android:id="@+id/tablelayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <TableRow android:id="@+id/tablerow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textview1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="acesso ao Cadastro" android:textappearance="? android:attr/textappearancelarge" /> </TableRow>
6) Projeto de Exemplo (Terceiro Exemplo) <TableRow android:id="@+id/tablerow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageview1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:src="@drawable/user" /> </TableRow> <TableRow android:id="@+id/tablerow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="nome:" /> <EditText android:id="@+id/edittextnome" android:layout_width="0dp" android:layout_height="wrap_content"> <requestfocus /> </EditText> </TableRow> <TableRow android:id="@+id/tablerow4" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/buttonacessar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="acessar" /> <Button android:id="@+id/buttonsair" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="sair" /> </TableRow> </TableLayout> </LinearLayout>
6) Projeto de Exemplo (Terceiro Exemplo) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableLayout android:id="@+id/tablelayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <TableRow android:id="@+id/tablerow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textview1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="cadastro" android:textappearance="?android:attr/textappearancelarge" /> </TableRow> <TableRow android:id="@+id/tablerow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/linearlayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textview01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="nome:" /> </LinearLayout> </TableRow>
6) Projeto de Exemplo (Terceiro Exemplo) <TableRow android:id="@+id/tablerow01" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/btnenviar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="enviar" /> <Button android:id="@+id/btnsair" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="sair" /> </TableRow> </TableLayout> </LinearLayout>
6) Projeto de Exemplo (Terceiro Exemplo) <EditText android:id="@+id/edittextnomecadastrado" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <requestfocus /> </EditText> <TableRow android:id="@+id/tablerow3" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/linearlayout01" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textviewnome"android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="e-mail:" /> </LinearLayout> </TableRow> <EditText android:id="@+id/edittextemail" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:inputtype="textemailaddress"/> <TableRow android:id="@+id/tablerow4" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RatingBar android:id="@+id/ratingbar" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow>
6) Projeto de Exemplo (Terceiro Exemplo) - Classe PrincipalActivity (Parte 1) public class PrincipalActivity extends Activity implements OnClickListener{ Button btnacessar; Button btnsair; String nome; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.principal); btnacessar = (Button) findviewbyid(r.id.buttonacessar); btnsair = (Button) findviewbyid(r.id.buttonsair); nome = ((EditText) findviewbyid(r.id.edittextnome)).gettext().tostring(); } btnacessar.setonclicklistener(this); btnsair.setonclicklistener(this);
6) Projeto de Exemplo (Terceiro Exemplo) - Classe PrincipalActivity (Parte 2) @Override public void onclick(view v) { if(v==btnacessar){ Intent i = new Intent(this, CadastroActivity.class); Bundle extra = new Bundle(); extra.putstring("nome", nome); i.putextras(extra); startactivity(i); }else if(v==btnsair){ this.finish(); } } }
6) Projeto de Exemplo (Terceiro Exemplo) - Classe CadastroActivity (Parte 1) public class CadastroActivity extends Activity implements OnClickListener{ String nome; String nomecadastrado; String email; int estrelas; Button btnenviar; Button btnsair; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.cadastro); btnenviar = (Button) findviewbyid(r.id.btnenviar); btnsair = (Button) findviewbyid(r.id.btnsair); btnenviar.setonclicklistener(this); btnsair.setonclicklistener(this); } Intent it = getintent(); if(it!= null){ Bundle params = it.getextras(); if(params!= null) { nome = params.getstring("nome"); } }
6) Projeto de Exemplo (Terceiro Exemplo) - Classe CadastroActivity (Parte 2) public void mensagemconfirmação(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setmessage("o email foi enviado com sucesso").setcancelable(false).setpositivebutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int id) { CadastroActivity.this.finish(); } }); AlertDialog alert = builder.create(); alert.settitle("cadastro"); alert.show(); } public String montarconteudo(){ String saida = "Cadastro Android \n"; saida+= "Obrigado "+nomecadastrado+" por participar da pesquisa de satisfação, sua avaliação foi de "+estrelas+"."; saida+= "\n\n\n Att, \n"+ nome; return saida; }
6) Projeto de Exemplo (Terceiro Exemplo) - Classe CadastroActivity (Parte 3) @Override public void onclick(view v) { if(v==btnenviar){ nomecadastrado = ((EditText)findViewById(R.id.EditTextNomeCadastrado)).toString(); email = ((EditText)findViewById(R.id.editTextEmail)).getText().toString(); estrelas = ((RatingBar)findViewById(R.id.ratingBar)).getNumStars(); enviaremail("cadastro Android", montarconteudo(), email); }else if(v==btnsair){ Toast.makeText(CadastroActivity.this, "Saindo da Aplicação", Toast.LENGTH_SHORT).show(); this.finish(); } } }
6) Projeto de Exemplo (Terceiro Exemplo) - Classe AndroidManifest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="meupacote.terceiroprojeto" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" /> <uses-permission android:name="android.permission.internet"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".principalactivity" > <intent-filter > <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".cadastroactivity" android:label="@string/app_name" ></activity> </application> </manifest>
OBRIGADO!