A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Projeto Avançado de Software II 3 – Revisão da Lição 2 Eduardo de Lucena Falcão.

Apresentações semelhantes


Apresentação em tema: "Projeto Avançado de Software II 3 – Revisão da Lição 2 Eduardo de Lucena Falcão."— Transcrição da apresentação:

1 Projeto Avançado de Software II 3 – Revisão da Lição 2 Eduardo de Lucena Falcão

2 Tópicos básicos Adapters (OK) – notifyDataSetChanged( ), add( ) e addAll( ) Resources (OK) – String, String array, Plurals, Formating and Styling Logging (OK) – Logcat Permissions (OK) – Declarando, Dangerous vs Normal permissions MainThread vs. Background Thread (OK) – ASyncTask 2

3 Relembrando Adapters Faz a ligação entre os dados brutos e a interface gráfica Detém o conhecimento de como da elemento será desenhado (tem uma referencia a um item layout) 3 Sempre que adicionarmos um novo dado ao Adapter, internamente ele chama o método notifyDataSetCanged().

4 Relembrando Adapters: add versus addAll 4 Notifica os observadores Ao invés de fazer for each chamando add dado por dado, é mais eficiente fazer um addAll.

5 O código do Android é aberto. – Sempre que preciso, investigue como é a implementação de um certo método/classe; – Não trate o código do Android como uma caixa preta. 5

6 String Resources Um arquivo que contém String Resources provê strings que podem ser usadas em nossa aplicação. Existem três tipos: – String: recurso XML para prover uma única string – String Array: recurso XML para prover arrays de strings – Quantity Strings (Plurals): recurso XML que considera diferentes strings para fins de pluralização 6

7 String Uma única string que pode ser referenciada a partir da aplicação ou de outros arquivos de recursos (ex.: xml layout); 7 Usado para acessar a string Deve ficar dentro do diretório values, mas o nome do arquivo é arbitrário. A tag raiz deve ser resources. Elemento xml: string

8 String 8 Arquivo salvo em res/values/strings.xml Layout XML aplicando a string em uma View Trecho de código da aplicação que recupera a String Também podemos usar getText(). A única diferença é que getText mantém um eventual rich text styling que a string contiver.

9 String Array 9 Um array de strings que pode ser referenciado apenas a partir da aplicação Usado para acessar o array de strings Deve ficar dentro do diretório values, mas o nome do arquivo é arbitrário. A tag raiz deve ser resources. Pode conter Strings e Arrays de Strings. Elemento xml: string-array Item: adiciona uma string ao array

10 String Array 10 Arquivo salvo em res/values/strings.xml Trecho de código da aplicação que recupera o array de strings

11 Plurals ou Quantity Strings Utilizado para se referir ao plural de uma string 11 One e other são as pluralizações mais interessantes para nós Usado para acessar o array de strings Elemento xml: plurals Item: adiciona uma nova string de quantidade

12 Plurals ou Quantity Strings 12

13 Plurals ou Quantity Strings 13 Arquivo salvo em res/values/strings.xml Param 1: seleciona o plural mais adequado Param 2: substitui %d

14 Formatting and Styling 14

15 Formatting and Styling 15 stringNº decimal

16 Formatting and Styling HTML – for bold text. – for italic text. – for underline text. 16

17 Logging 17 Boa prática definir como constante: geralmente, o nome da classe.

18 LogCat 18 Filtrando pelo id do processo. Nível de logging

19 Permissões Para proteger a integridade do sistema e privacidade dos usuários, o Android executa cada aplicativo com acesso limitado a recursos externos ao app; – Informações do usuário: contatos – Operações custosas ($): enviar sms/mms – Recursos do sistema: câmera Sempre que o app for usar estes recursos, ele tem que pedir permissão ao sistema A permissão de acesso a alguns recursos é concedida de maneira automática, enquanto que para outros o sistema pede permissão ao usuário Em que momento o app requisita as permissões? – Instalação: Android 5.1 e versões anteriores – Runtime: da versão Android 6.0 em diante 19

20 Quais permissões seu APP precisa? À medida em que vamos desenvolvendo é possível notar quais permissões o app precisará – Tipicamente, toda informação e recurso que não foi criada pelo app precisará de permissão – Ex.: acesso a internet, ligar a câmera, ligar/desligar WiFi – Dois principais níveis de permissão: normal e perigosa 20

21 Permissões normais e permissões perigosas Normal: cobre áreas externas que o app vai acessar mas que trazem pouco risco à privacidade do usuário ou operação de outros apps – Ex.: permissão pra setar a timezone – Sempre que o app declara uma permissão normal, ela é concedida automaticamente 21 ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCESS_NOTIFICATION_POLICY ACCESS_WIFI_STATE BLUETOOTH BLUETOOTH_ADMIN BROADCAST_STICKY CHANGE_NETWORK_STATE CHANGE_WIFI_MULTICAST_STATE CHANGE_WIFI_STATE DISABLE_KEYGUARD EXPAND_STATUS_BAR GET_PACKAGE_SIZE INSTALL_SHORTCUT INTERNET KILL_BACKGROUND_PROCESSES MODIFY_AUDIO_SETTINGS NFC READ_SYNC_SETTINGS READ_SYNC_STATS RECEIVE_BOOT_COMPLETED REORDER_TASKS REQUEST_IGNORE_BATTERY_OPTIMIZATIONS REQUEST_INSTALL_PACKAGES SET_ALARM SET_TIME_ZONE SET_WALLPAPER SET_WALLPAPER_HINTS TRANSMIT_IR UNINSTALL_SHORTCUT USE_FINGERPRINT VIBRATE WAKE_LOCK WRITE_SYNC_SETTINGS

22 Permissões normais e permissões perigosas Dangerous: cobre áreas externas que o app vai acessar que envolvem informações privadas do usuário, ou que tem potencial de danificar informações já armazenadas, ou finalmente, que podem atrapalhar a operação de outros aplicativos – Ex.: ler os contatos, acessar localização. – Sempre que o app declara uma permissão perigosa, o sistema requisita permissão ao usuário – As permissões são divididas em permission groups Sempre que um aplicativo for pedir permissão a um usuário ele requisita acesso ao permission group como um todo, e não à permissão específica. Mas, se o usuário aceitar, o app só terá acesso à permissão requisitada. Se posteriormente o app requisitar uma permissão de um permission group cujo usuário já aceitou, essa permissão é concedida sem que o sistema pergunte novamente ao usuário. 22

23 Permissões normais e permissões perigosas 23 CALENDAR : READ_CALENDAR, WRITE_CALENDAR CAMERA : CAMERA CONTACTS : READ_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTS LOCATION : ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION MICROPHONE : RECORD_AUDIO PHONE : READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL, USE_SIP, PROCESS_OUTGOING_CALLS SENSORS : BODY_SENSORS SMS : SEND_SMS, RECEIVE_SMS, READ_SMS, RECEIVE_WAP_PUSH, RECEIVE_MMS STORAGE : READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE

24 24

25 Declarando permissões Declaramos as permissões que o nosso app precisa no Manifest.xml – Dependendo do nível de criticidade, elas serão concedidas automaticamente pelo sistema 25

26 Declarando permissões Seu app só precisa declarar as permissões para ações que ele mesmo fizer! – Ele não precisará declarar permissão se ele pedir para outro app fazer uma tarefa – Ex.: seu app precisar ler um contato da agenda. Mas, ao invés de fazer diretamente, ele usa um Intent (veremos adiante) para requisitar informações do app de Contatos. Nesta situação, seu app não precisa declarar esta permissão. 26

27 27

28 Main thread versus Background thread Operações custosas (tempo) como chamadas na internet ou leitura e escrita em bancos de dados bloquearão a UI. – Se a UI for bloqueada por alguns segundos (cerca de 5) o Android exibe ANR (“app not responding”) 28

29 Main thread versus Background thread Andoid UI toolkit is not thread-safe – Toda manipulação da UI deve ser realizada a partir da UI thread (main thread) Duas regras para facilitar a nossa vida quando lidamos com thread: – Não bloqueie a thread principal – Não acesse o UI toolkit de fora da thread principal 29

30 AsyncTask Solução thread-safe para a 2ª regra: “ não acesse o UI toolkit de fora da thread principal ” Executa as operações em uma thread de background e depois publica os resultados na UI thread Como? 1.Estender AsyncTask 2.Implementar o método doInBackground() 3.Implementar onPostExecute() que recebe o resultado de doInBackground() 1.onPostExecute() roda na thread principal, logo você pode usar para atualizar sua UI sem que haja problemas de sincronização 4.Com isto, você poderá executar suas tarefas em background chamando o execute() 30

31 AsyncTask 1.Estender AsyncTask 2.Implementar o método doInBackground() 3.Implementar onPostExecute() que recebe o resultado de doInBackground() 1.onPostExecute() roda na thread principal, logo você pode usar para atualizar sua UI sem que haja problemas de sincronização 4.Com isto, você poderá executar suas tarefas em background chamando o execute() 31 1.O tipo de parâmetro de doInBackground 2.Objeto para especificar o progresso da tarefa 3.O tipo do parâmetro do resultado da operação, i.e. argumento do onPostExecute

32 32

33 Considerando a AsyncTask criada para atualizar os dados exibidos no aplicativo... 33 Problema da AsyncTask Alternativa: usar services!

34 Próxima aula Aprofundando permissões: – Requisitando permissões em tempo de execução: https://developer.android.com/intl/pt- br/training/permissions/requesting.html https://developer.android.com/intl/pt- br/training/permissions/requesting.html – Recomendações sobre permissões: https://developer.android.com/intl/pt- br/training/permissions/requesting.html https://developer.android.com/intl/pt- br/training/permissions/requesting.html – Definindo novas permissões Interface – Menu Options: setHasMenuOptions, inflate – Configuration/refresh button Json parsing 34

35 Entregáveis Na data: 100% Próxima aula depois do deadline: 50% Daí em diante: 0% 35

36 Avaliação Mini-testes (aproximadamente 6) + Entregáveis: – Print das telas do app – Código parcial do projeto + Projeto final (individual) Nota – mini-testes (25%) + entregáveis (25%) – Projeto final (50%) 36

37 Referências http://developer.android.com/intl/pt- br/guide/topics/resources/string-resource.html http://developer.android.com/intl/pt- br/guide/topics/resources/string-resource.html http://developer.android.com/intl/pt- br/tools/debugging/debugging-log.html http://developer.android.com/intl/pt- br/tools/debugging/debugging-log.html https://developer.android.com/intl/pt- br/training/permissions/index.html https://developer.android.com/intl/pt- br/training/permissions/index.html https://developer.android.com/intl/pt- br/guide/topics/security/permissions.html#normal- dangerous https://developer.android.com/intl/pt- br/guide/topics/security/permissions.html#normal- dangerous https://developer.android.com/intl/pt- br/guide/topics/security/normal-permissions.html https://developer.android.com/intl/pt- br/guide/topics/security/normal-permissions.html http://developer.android.com/guide/components/processe s-and-threads.html#q=Service http://developer.android.com/guide/components/processe s-and-threads.html#q=Service 37


Carregar ppt "Projeto Avançado de Software II 3 – Revisão da Lição 2 Eduardo de Lucena Falcão."

Apresentações semelhantes


Anúncios Google