Introdução ao Desenvolvimento para Sistema Operacional Android Dr. Sylvio Barbon Junior [email protected] Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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. core, 1GB RAM) Samsung Galaxy SII 1.5GHz Dual- Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 1) Introdução ao Android e Mercado de Dispositivos Móveis OHA: Open Handset Alliance Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 1) Android Fonte: (http://developer.android.com/resources/dashboard/platform-versions.html) Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 2) Plataforma Android Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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. Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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) Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 4) Elementos da Aplicação Activities Services Broadcast Receivers Content Providers Intents e Intents Filters Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 4) Elementos da Aplicação Content Providers - Forma de compartilhamento de dados; - Entre aplicações e aplicações; - Entre aparelhos e aparelhos; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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(); Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android Activities Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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”; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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. Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 5) Kit de Desenvolvimento a) Android Virtual Device (AVD) - Emulador; b) Android Development Tool (ADT); c) Dalvik Debug Monitor Service (DDMS); Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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 Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 6) Projeto de Exemplo 1) Activity + View; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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 Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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 Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior </manifest> Introdução ao Desenvolvimento para Sistema Operacional Android 6) Projeto de Exemplo 4) Compilando e Testando - Basta acessar a opção “RUN”; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 6) Projeto de Exemplo (Segundo Projeto) TextView EditText Button Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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()); } } Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 6) Projeto de Exemplo (Segundo Projeto) Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior </LinearLayout> Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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); } Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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(); } } } Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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"); } } } Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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; } Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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(); } } } Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android 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> Sylvio Barbon Junior Introdução ao Desenvolvimento para Sistema Operacional Android OBRIGADO! Sylvio Barbon Junior