# 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  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.