Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
2
Exercício 3.1 Solicitando permissão para abrir uma página Web ü Criaremos uma Ac.vity com um EditText (para entrada de uma URL), um Bu?on e
uma webView, para exibir a página web. ü Crie um novo projeto e chame de TestandoPermissao
ü Selecione API 8 para Minimum API, API 16 para Target API e API 17 para Compile With (esse será o padrão de versões ao longo deste curso)
ü Em Applica3on Info altere package name para br.rio.puc.lac.android.course e selecione a caixa para criar a ac.vity dando nome de TestandoPermissaoAc3vity
ü Clique em Finish e o projeto será criado em seu workspace
3
Exercício 3.1 Solicitando permissão para abrir uma página Web ü Abra e edite o arquivo de layout (pasta res > layout.xml) ü Exclua o componente TextView (criado por padrão pelo plugin ADT)
ü Ainda no arquivo de layout, adicione um LinearLayout (horizontal) ao layout principal • Encontre este componente através do editor gráfico (Graphical Layout) nas
opções de Layouts
ü Dentro do layout horizontal, adicione um EditText e um BuUon • Selecione o BuUon adicionado e visualize suas propriedades na view
Proper-es do Eclipse • Caso a view não mostre as propriedades, clique com o botão direito do mouse no
Bu?on, e no menu de contexto selecione Show In > Proper3es
• Encontre a propriedade Text e altere seu valor para ‘Ir...’
4
Exercício 3.1 ü Então, adicione o componente WebView no layout principal da ac.vity
Note que cada componente tem a propriedade android:id, para iden.ficação. Ao u.lizar o editor gráfico para definir a interface, o mesmo já adiciona o prefixo“@+” (p. ex. ‘@+id/webView1’).
Isso faz com que o plugin ADT crie uma nova referência
na classe de recursos R do projeto, permi.ndo assim receber a referência via código.
5
Exercício 3.1 Solicitando permissão ü Edite o arquivo da ac.vity TestandoPermissaoAc3vity
ü É necessário receber a referência para os três componentes visuais adicionados: EditText, BuUon e WebView -‐ através de findViewById()!
ü E criar objetos do .po EditText, Bu?on e WebView correspondentes, no método onCreate :
6
Exercício 3.1 ü Agora, definindo o processamento da ac.vity...
• O obje.vo é: o usuário entra com uma URL, clica no botão e a página aparece para o usuário na WebView
ü Então, registre um OnClickListener, e no seu método onClick() obtenha o string editText.getText e passe como parâmetro para webView.loadUrl:
Obs: há necessidade de incluir a
palavra reservada final antes da declaração do EditText e da WebView, para que seja possível referenciar estes objetos dentro de uma classe anônima OnClickListener (p/ tratar o evento de clique do botão)
7
Exercício 3.1 ü No método onCreate, veja que (i) alteramos o objeto webView para receber
como WebViewClient a instância de uma nova classe, e (ii) habilitamos o uso de JavaScript, para facilitar os testes com diferentes endereços web.
• Precisamos atribuir um cliente para este webView para que o próprio componente abra e visualize o endereço web. Caso contrário, o framework Android abriria o browser padrão com o endereço solicitado.
ü Abaixo segue o código para criação da classe cliente:
Obs: shouldOverrideUrlLoading() permite interceptar o carregamento de uma URL.
8
Exercício 3.1 Solicitando permissão ü Com a aplicação já pronta, execute-‐a clicando com o botão
direito do mouse em cima do projeto e em seguinda Run as... > Android Applica3on • Este comando iniciará o emulador, caso ele não esteja
aberto. • Lembrando que a versão u.lizada no curso é a Android
4.2 – (a.k.a. Jelly Bean). É necessário já exis.r um AVD criado com esta configuração
ü A aplicação aparecerá no emulador. Entre com qualquer endereço completo – isto é, incluindo protocolo hUp://, e clique em no botão Ir... • P. ex., entre com o endereço h?p://www.globo.com e
clique em Ir... e você verá que o web site não é carregado como na figura ao lado
9
Exercício 3.1 ü O problema com a aplicação é que esta, para carregar um site na web, necessita de
conexão com a internet para realizar esta conexão
ü Mas a aplicação não solicitou permissão para conexão com a internet
ü Para tal, abra o arquivo de manifesto da aplicação e vá até a aba Permissions. Clique em Add... e escolha a opção Uses Permission • Uma permissão de uso será adicionada à lista, e agora deve-‐se selecionar qual
será. Na combo box à direita, escolha a permissão android.permission.INTERNET
ü No arquivo XML de manifesto, visualize como é a declaração da permissão de uso de uma funcionalidade, como a seguir:
10
Exercício 3.1 ü Esta declaração no arquivo de manifesto informa ao
framework Android qual (ou quais) permissão de uso este aplica.vo requer para seu correto funcionamento
ü Execute novamente a aplicação, dessa vez a permissão de uso inserida no arquivo de manifesto
ü Teste a aplicação colocando qualquer endereço web válido e clicando no botão Ir...
11
Exercício 3.2 Trabalhando com ac3vi3es Iremos criar duas Ac.vi.es (Main e SecondAc.vity), e usar um Intent Explícito para
fazer a Main criar a SecondAc.vity:
ü Crie um novo projeto Android de nome IntentsExplicitos
ü Para Build Target selecione a versão 4.2, Jelly Bean – versão u.lizada neste curso
ü Em Applica3on Info altere Package Name para br.rio.puc.lac.android.course e selecione a caixa para criar a ac.vity dando nome de MainAc3vity
ü Clique em Finish e o projeto será criado em seu workspace
12
Exercício 3.2 Trabalhando com ac3vi3es ü Execute a aplicação clicando com o botão direito no projeto e selecionando a
opção Run as... > Android Applica3on • Você deverá ver a ac.vity padrão criado pelo plugin ADT
ü Ao abrir o arquivo de manifesto, você encontrará o código abaixo na declaração da ac.vity
Este intent-‐filter declara ao Framework Android que esta ac.vity é a principal da aplicação. Já esta tag de categoria informa que esta ac.vity
deve constar na listagem de aplicações do sistema
13
Exercício 3.2 Trabalhando com ac3vi3es ü Neste exercício, iremos iniciar uma nova ac3vity a par.r de um evento na
MainAci3vty que cria um intent explícito que será entregue a uma segunda ac3vity
ü Para criar uma nova ac3vity, devemos criar primeiro um novo arquivo Java e um arquivo XML de layout
ü Para criar o arquivo Java, clique com o botão direito em cima do package br.rio.puc.lac.android.course e selecione a opção New > Class • Em Name escreva SecondAc3vity, e em Superclass entre com
android.app.Ac3vity • Clique em Finish e o arquivo Java será criado. Contudo, é necessário
implementar o método onCreate() onde será atribuído qual interface gráfica representará a ac.vity
• Digite onCreate (ou apenas parte de) e tecle CTRL + SPACE • Selecione o método onCreate e tecle ENTER para criação do método
14
Exercício 3.2 Trabalhando com ac3vi3es ü Com o método onCreate() criado
automa.camente pelo Eclipse, é necessário agora criar o arquivo de interface para esta segunda ac3vity
ü Para isto, clique no botão que o plugin ADT apresenta na toolbar do Eclipse
• Um wizard para criação de arquivos XML para Android é mostrado, como abaixo
• Em Resource Type deixe como Layout • Em Project, assegure que seja o projeto
IntentsExplicitos • Em File entre com second.xml • Em Root Element, selecione LinearLayout • Clique em Finish e o arquivo será criado na
pasta res/layout
15
Exercício 3.2 Trabalhando com ac3vi3es ü Ao editar o arquivo second.xml, adicione um objeto do .po TextView e altere a
propriedade Text para Esta é a segunda ac3vity! • O arquivo XML e sua visualização devem ficar como abaixo
16
Exercício 3.2 Trabalhando com ac3vi3es ü Com o arquivo XML pronto para uso, agora é possível u.lizá-‐lo no código Java
• No método onCreate() de SecondAc3vity, adicione o seguinte código que fará com que esta ac3vity receba o arquivo XML criado como interface
ü Altere o arquivo de interface main.xml excluindo o widget do .po TextView e adicione um widget do .po BuUon
• O obje.vo deste botão é chamar a segunda ac.vity recém-‐criada • Altere a propriedade Text do BuUon criado para Chamar segunda ac3vity
17
Exercício 3.2 Trabalhando com ac3vi3es ü Em MainAc3vity, é necessário inserir o código que irá chamar a SecondAc3vity
através de um intent explícito
Recebendo a referência ao botão adicionado e
atribuindo o tratamento ao evento
de clique
Criando um intent explícito passando qual componente deverá tratá-‐lo (neste caso, SecondAc3vity.class) e u.lizando
este intent através do método startAc3vity()
18
Exercício 3.2 Trabalhando com ac3vi3es ü Após fazer as alterações, execute a aplicação e clique no botão
ü Ao clicar no botão, que cria o intent explícito para chamar a segunda ac.vity, um erro é lançado e aplicação é chamada
ü Visualizndo na view do Eclipse chamada LogCat é possível perceber uma série de mensagens de erro
19
Exercício 3.2 Trabalhando com ac3vi3es ü O erro aconteceu pois é obrigatório declarar no arquivo de manifesto todos
componentes da aplicação para o Framework Android • E ainda não foi feito isso para a SecondAc3vity...
ü Edite o arquivo de manifesto da aplicação e altere o código como a seguir
20
Exercício 3.2 Trabalhando com ac3vi3es ü Execute novamente a aplicação e o erro não mais persis.rá
ü Ao clicar no botão da primeira ac.vity, o intent explícito é criado e o Framework Android instancia a segunda ac.vity, mostrando-‐a ao usário
21
Exercício 3.3 Passando valores entre ac3vi3es através de intents ü O obje.vo deste exercício é mostrar como passar valores entre ac.vi.es
u.lizando os Extras <chave, valor> em Intents • Extras são pares chave-‐valor disponíveis de um intent object manipulados através de
métodos para inserir – put – e para receber – get ü Crie um novo projeto Android e chame de IntentExtras
• Como nos outros exercícios, selecione para Build Target a versão 4.2 do Android, e crie uma ac.vity chamada MainAc3vity
ü Edite o arquivo de layout main.xml e adicione um EditText e um BuUon (exclua o TextView criado por padrão). • Altere a propriedade Text do botão para Chamar...
22
Exercício 3.3 Passando valores entre ac3vi3es através de intents ü Crie uma nova classe Java no mesmo package existente, chamada SecondAc3vity,
que herda de android.app.Ac3vity • Implemente o método onCreate
ü Crie um novo arquivo de layout chamado second.xml, e escolha como Root Element a opção LinearLayout
• Edite este arquivo second.xml adicionado um objeto do .po TextView
main.xml
second.xml
23
Exercício 3.3 Passando valores entre ac3vi3es através de intents ü No método onCreate da classe MainAc3vity, faça as seguintes alterações:
• Trate o evento do clique do botão para que: • Crie o intent explícito para chamar a segunda ac.vity – SecondAc3vity • Recupere o texto inserido no EditText e insira este texto nos Extras do intent
explícito
Manipula os Extras do intent inserindo um novo par chave-‐valor, que será u.lizado em
SecondAc3vity
Recupera referências a objetos definidos no arquivo de XML e iden.ficados através da classe
de recursos R
24
ü Na classe SecondAc3vity, no método onCreate, receba a referência do TextView e insira o código para acessar o intent que entregue pelo Framework Android a esta ac3vity e com ele recupere a informação passada como Extra • O método getIntent() recebe o intent u.lizado para criar a ac.vity
Exercício 3.3 Passando valores entre ac3vi3es através de intents
Recebe o intent responsável e com ele acessa seus extras atrás de informações importantes Atribui qual arquivo de layout
será usado nesta ac3vity e recebe a referência ao único objeto (widget) declarado
25
ü Altere o arquivo de manifesto para declaração da SecondAc3vity, da mesma forma que foi feito no exercício anterior
ü Execute a aplicação a par.r de Run as... > Android Applica3on • Entre com um texto no EditText disponível e clique no botão. O texto será mostrado no
TextView de outra ac3vity
Exercício 3.3 Passando valores entre ac3vi3es através de intents
26
Exercício para casa Modifique as ac.vi.es Main e SecondAc.vity para uma invocação usando o
startAc.vityForResult, em que: ü a Aci.ty SecondAc.vity pode retornar um valor ao executar o método finish ü a Ac.vity Main pode processar/exibir o resultado estendendo o método
onAc.vityResult
Public void onClick(View view) { Intent i = new Intent(…) … starActivityForResult(I, REQUEST_CODE); } … @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { if (data.hasExtra("returnKey1")) { Toast.makeText(this, data.getExtras().getString("returnKey1"), Toast.LENGTH_SHORT).show(); } } }
@Override public void finish() { Intent data = new Intent(); data.putExtra("returnKey1", ”bla"); // Activity finished ok, return the data setResult(RESULT_OK, data); super.finish(); }