26
Desenvolvimento para Android Prá3ca 3 Prof. Markus Endler

Aula 3 - Práticaendler/courses/Android/transp/Aula P3... · 9 Exercício3.1 +! O!problemacom!aaplicação!é!que!esta,!paracarregar!um!site!naweb,! necessitade+ conexãocomainternetpararealizarestaconexão+!

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Desenvolvimento  para  Android  Prá3ca  3  

Prof.  Markus  Endler  

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(); }