# Programação de Dispositivos Móveis ## Lab01 - Introdução ao ambiente de desenvolvimento integrado para aplicações Android ### 1.1 O que significa, para si, IDE? IDE = Integrated Development Enviroment ### 1.2 O acrónimo SDK, é abreviatura de quê? SDK = Software Development Kit ### 1.3 Define corretamente SDK SDK é um conjunto de ferramentas de desenvolvimento de software que permitem a criação de aplicações para um dado pacote, sistema de software, plataforma de hardware, computador, consola de jogo de video, sistema operativo, sistema operativo ou outra plataforma de desenvolvimento semelhante. ### 1.6 O que é uma API? API significa Application Programming Interface. É um conector/interface que faz a interligação entre diferentes aplicações/sistemas com linguagens de programação distintas, de forma célere e com toda a segurança necessária. ### 1.6.1 Defina o acrónimo AVD AVD significa Android Virtual Device. ### 1.7 Qual a versão mais recente já em utilização do SO Android? Android 13 ### 1.8 Qual a versão mais recente, e atualmente em utilização, do iOS? iOS 16 ### 1.12 Como se chama a versão mais recente, e em utilização, do SO Android? Tiramisu ### 1.13 Como se chama a versão anterior à versão 10 do SO Android? Pie ### 1.14 Qual o ano em que foi lançado o AndroidTM pela primeira vez? 2008 ### 1.15 Qual é o núcleo base, sobre o qual o SO Android foi construído? Linux ### 1.16 Qual é o núcleo base do iOS? Unix ### 1.18 Assumindo que escolheu o modo Project, onde está contido o código JAVA da aplicação? Na pasta app/src/main/java. ### 1.19 O que significa src? Significa "Source". ### 1.20 Assumindo que escolheu o modo Project, em que pasta está contido o ficheiro AndroidManifest.xml? Na pasta root. ### 1.21 Quais as informações que pode definir no AndroidManifest? * A versão das aplicações; * As premissões e acessos; * A API minima; * A API alvo; * O nome da aplicação; * Podem ser definidos também diversos componentes (Activities, services, receivers, providers), filtros de intentos. ### 1.22 O que significa o X do acrónimo XML? Extensible. ### 1.23 ## Lab02 - Exploração das ferramentas fornecidas com o Software Development Kit (SDK) para Android ### 2.2 ![](https://i.imgur.com/21k3Aev.png) O que é que esta instrução está a fazer exatamente? Está a definir a variável `ANDROID_HOME`. ### 2.3 Qual é a versão mais recente desta ferramenta de compilação Gradle? Versão 7+ ### 2.4 Em que linguagem é que o Gradle foi implementado? JAVA, Groovy e Kotlin ### 2.5 A ferramenta gradle foi especialmente desenhada para construir aplicações Java. É possível usá-la para automatizar o processo de compilação e construção para outras linguagens? Sim, é. ### 2.6 Na expressão "construir uma aplicação Android" (e grosso modo), o que é que lhe parece significar a palavra construir? Compilar o código fonte, juntar e enumerar recursos, e empacotar binários, recursos e descrições, para além de outros artefactos. ### 2.7 Qual o símbolo do gradle? Um elefante. ### 2.8 Em que diretoria é que está guardado o comando gradle? bin ### 2.9 O que é que contém a diretoria `lib`? Contém ficheiros `.jar` relativos à implementação do Gradle. ### 2.10 Em que pasta está a ferramenta `adb`? platform-tools ### 2.11 Em que pasta está a ferramenta `sdkmanager`? tools\bin (sdkmanager.bat) ### 2.12 É possível encontrar uma shell para bases de dados SLQLite3 em alguma das diretorias antes enunciadas? Sim, é, nomedamente na diretoria platform-tools. ### 2.13 Em que pasta pode ser encontrada a ferramenta `avdmanager`? Na mesma que a ferramenta sdkmanager (tools\bin). ### 2.14 Qual o comando que mostra quais as versões disponíveis no seu sistema? `$ ./avdmanager list targets` ### 2.16 Já agora, e revisitando o tema da secção Preliminares, acha que é possível colocar um dispositivo virtual a correr sem abrir o Android Studio ou o Device Manager? Sim. Navegando até à diretoria onde estão as ferramentas do Android SDK e usando o comando emulator: `$ cd android-sdk/emulator` `$ ./emulator -avd NOME_DISPOSITVO` ### 2.17 A ferramenta gradle é alimentada por um ficheiro que lhe fornece algumas das informações necessárias ao processo de compilação. Como se chama esse ficheiro? `build.gradle` ### 2.18 Um projeto Android é compilado para um arquivo `apk`. O que abrevia exatamente `apk`? Android Package Kit. ### 2.18.1 Em que sub-diretoria é que o arquivo resultante foi colocado? `build` ### 2.18.2 Como se chama o arquivo resultante? `app-debug.apk` ### 2.22 Note que acima foi dito que o projeto Android é compilado para um arquivo. O que é um arquivo? É um ficheiro composto por outros ficheiros e metadados. ### 2.23 Quais das seguintes palavras fazem parte da expansão do acrónimo ADB? - [x] Android - [x] Debug - [x] Bridge ### 2.24 `$ adb logcat`. Qual o resultado deste comando? É exibido um log do sistema virtualizado que se está a usar para testar a aplicação. ## Lab03 - Introdução à programação e desenvolvimento de interfaces de utilizador orientadas por eventos para aplicações Android ### 3.1 Qual combinação lista todos os AVDs disponíveis com o comando `$ emulador` ? `emulator -list-avds` ### 3.3 Em que local o ficheiro de layout pode ser encontrado? Em src\main\res\layout ### 3.6 Qual o significado do `@` e do `+` na definição da propriedade `android:id`? - `+` - quando usamos os atributos do xml precisamos de especificar o id, logo temos de incluir o "+"; - `@` - vem no inicio da string que indica que virá um id do atributo do xml. ### 3.7 Estes factos vão ao encontro do que foi referido em relação à arquitetura de software MVC? De facto, isto parece ir ao encontro daquela arquitetura de desenvolvimento de software na medida em que as vistas sobre os dados são definidas em XML. ### 3.8 app/src/main/java/pmd/di/ubi/pt/acalculator ### 3.9 Consegue encontrar a linha de código que carrega o layout da aplicação a partir do ficheiro? `super.onCreate(savedInstanceState);` ### 3.10 Por que é que é que cada vez que declara a função `findViewById(...)` necessita de colocar o nome de uma classe de um objeto entre parêntesis antes? A função devolve sempre um objeto mais geral, da classe View, que precisa ser convertido para a subclasse mais específica através de uma operação de tipificação (cast). ### 3.11 Por exemplo, experimente mudar a propriedade `android:layout_width="wrap_content"` do botão para `android:layout_width="match_parent"`. Qual o efeito desta alteração na interface de utilizador da aplicação? O botão passa a ocupar o máximo do ecrã na horizontal. ### 3.12 Que nome se dá à classe criada pela instrução `new View.onClickListener()`? Classe local. ### 3.13 O que significa URL? Uniform Resource Locator. ## Lab04 - Exercícios para análise do ciclo de vida de uma Atividade numa aplicação Android ### 4.1 Qual é o pacote que deve importar para usar objetos interativos como o botão? android.widget.* ### 4.2 Qual é a classe pai (ou superclasse) da classe Button? android.widget.Button ### 4.6 A que conceito se refere a instrução `R.id`? A um método. ### 4.7 O que são os IDs que utiliza no código para referenciar alguns recursos de uma aplicação Android? ### 4.11 Como se chama a classe que lhe permite escrever entradas no registo do sistema e qual o seu import? `Log` e `import Java.util`. ## Lab05 - Implementação de simples aplicações que demonstram o funcionamento dos intentos ### 5.6 Em que pacote é que o método `setContentView()` está definido? `import android.app.Activity` ### 5.11 como se chama a classe que implementa a atividade principal? Então: tem de se chamar, obrigatoriamente, `MainActivity`. - **NOTA**: A Classe que implementa a atividade principal tem de ter o mesmo nome que o ficheiro. ### 5.19 Como é que se instancia um intento para uma atividade local? Através do construtor `Intent(Context, Class)`, que aceita o contexto da classe atual e o nome do componente destino. ## Lab06 - Estudo do funcionamento dos filtros de intentos ### 6.1 Onde (em que ficheiro) é que se criam os filtros de intentos? No AndroidManifest.xml ### 6.2 Dentro de que elemento é que deve ser colocado o filtro de intentos no ficheiro XML? Dentro do elemento activity. ### 6.3 Qual dos seguintes excertos de código XML define corretamente o filtro de intentos? ```xml <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"> <data android:mimeType="text/plain"/> </intent-filter> ``` ### 6.5 Das opções seguintes, quais concretizam formas de ver o `logcat`? - [x] `$ adb logcat` - [x] Android monitor. ### 6.6 Qual o método que permite que a atividade principal chame a segunda de forma a que esta lhe devolva um resultado? `startActivityForResult(Intent,int);` ### 6.7 Qual a função do segundo parâmetro (um inteiro (int)) referido na questão anterior? - [X] Este segundo parâmetro serve para transportar erros da componente que é invocada para a que invoca; - [X] Este segundo parâmetro serve para identificar um pedido de retorno em particular. I.e., se forem lançados vários intentos com pedido de retorno, é este inteiro que permite identificar uma resposta específica. ### 6.9 Qual é a função que ajusta o resultado de novo para a primeira atividade? `setResult(RESULT_OK,iResult); ` ### 6.11 Qual é o método que é automaticamente despoletado quando uma atividade retorna um valor àquela que a invocou? `onActivityResult(int, int, Intent); ` ### 6.12 O objetivo é verificar se o intento que foi devolvido diz respeito ao que foi despoletado. ### 6.13 O objetivo é verificar se o resultado está de acordo com o que a atividade estava à espera. ### 6.14 - 5; - Ficheiros editados: - `activity_main.xml`; - `MainActivity.java`; - `AndroidManifest.xml`; - `ProcessNames.java`; - `activity_process_names.xml`; ### 6.15 Como é que se pode fazer uma chamada de um emulador para outro? Abrindo a aplicação de chamadas num dos emuladores, digitando o número da instância do segundo emulador (dada por `$ adb devices` ) e executando as chamadas. ### 6.19 Das seguintes, qual concretiza a linha que define corretamente o id da etiqueta de texto? - [X] `android:id="@+id/lc"` ### 6.22 O registo de chamadas é considerado como um recurso a proteger no sistema Android Sim. ### 6.23 De que forma é que o sistema responde a pedidos a recursos protegidos? Negando todo o acesso, a não ser que a permissão para aceder ao recurso tenha sido declarada no `AndroidManifest.xml`. ### 6.25 O que é que fazem estas três linhas de código? ```java if(checkSelfPermission(Manifest.permission.READ_CALL_LOG) != 0 ) { //0=PackageManager.PERMISSION_GRANTED requestPermissions(newString[] { Manifest.permission.READ_CALL_LOG} , 1); } else... ``` A linha 1 verifica se as permissões já foram dadas; a linha 3 pede as permissões.