---
# System prepended metadata

title: Programação de Dispositivos Móveis
tags: [UBI]

---

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

