PDM · DAW 2

Aula 24 · Semana 10 · Quarta, 11 de novembro de 2026 · 16:00 às 18:00

Hardware e sensores, e sprint 2

Teoria (30 minutos): acesso ao hardware: câmara, sensores de movimento, NFC, Bluetooth Low Energy, biometria e haptics; permissões, consumo e diferenças entre iOS e Android. Prática: sprint 2, a uma semana da review.

Review da sprint 2: quarta 18/11

No fim desta aula consegues

Câmara e galeria

Para os testes: image_picker delega no sistema e não tem preview; camera tem preview e custa mais permissões e código.

Sensores de movimento

SensorMedeUsos reais
AcelerómetroAceleração em x, y, z, incluindo a gravidadeDetetar abanão, orientação do ecrã, contar passos de forma grosseira
GiroscópioVelocidade angularRotação fina, realidade aumentada, jogos
MagnetómetroCampo magnéticoA seta da bússola no Google Maps
BarómetroPressão atmosféricaAltitude relativa, andares subidos; podia dar a pressão local no Tempo Açores

Para os testes: os sensores de movimento não pedem permissão, mas custam bateria; cancela o stream quando ninguém está a olhar.

Analogia Os sensores são os sentidos do telemóvel. O acelerómetro e o giroscópio são o ouvido interno: dão o equilíbrio e o movimento sem pedir licença a ninguém. A câmara é a vista. O NFC é o toque: só funciona a centímetros e num instante. O BLE é a voz: alcança dezenas de metros e mantém uma conversa. Cada sentido tem a sua permissão e o seu custo em bateria.

NFC

Para os testes: em NFC, o Android faz leitura, escrita e HCE; o iOS lê e escreve numa sessão do sistema e HCE é caso especial.

Bluetooth Low Energy

Para os testes: BLE em Android antigo pede localização para o scan; não é um bug, é privacidade.

Biometria, haptics, widgets de ecrã inicial

Para os testes: biometria é desbloqueio local; um widget de ecrã inicial é desenhado em código nativo e o Flutter só lhe dá dados.

Sprint 2: ponto de situação

Regra da última semana Um PR pequeno merged vale mais do que uma funcionalidade grande a meio. Se uma issue não cabe até terça, parte-a ou move-a para a sprint 3.

Demo: ler uma tag NFC e vibrar

No telemóvel do docente. O código é curto, e o que interessa é a sequência: verificar disponibilidade, abrir sessão, tratar a tag, fechar sessão.

import 'package:flutter/services.dart';
import 'package:nfc_manager/nfc_manager.dart';
import 'package:nfc_manager_ndef/nfc_manager_ndef.dart';

class NfcService {
  Future<void> lerTag({required void Function(String) aoLer}) async {
    if (!await NfcManager.instance.isAvailable()) {
      throw StateError('NFC indisponível ou desligado neste telemóvel');
    }
    await NfcManager.instance.startSession(
      pollingOptions: {NfcPollingOption.iso14443, NfcPollingOption.iso15693},
      onDiscovered: (NfcTag tag) async {
        final mensagem = await Ndef.from(tag)?.read();
        final registo = mensagem?.records.firstOrNull;
        final texto = registo == null
            ? 'tag sem conteúdo NDEF'
            : String.fromCharCodes(registo.payload.skip(3)); // salta o cabeçalho do Text Record
        await HapticFeedback.heavyImpact();
        aoLer(texto);
        await NfcManager.instance.stopSession();
      },
    );
  }
}

Demo: o que interessa

Exercício 1 Se o vosso projeto tem um gesto que merece feedback (adicionar favorito, terminar o pull-to-refresh, receber um aviso vermelho), abre um PR de cinco linhas com HapticFeedback.selectionClick() ou mediumImpact() nesse ponto. Testa no telemóvel, não no emulador: o emulador não vibra.

Checklist para a review de quarta

Até segunda

Para fazer

  • A sprint 2 fecha na próxima quarta, 18/11: demo de 5 minutos preparada, com a checklist do slide anterior cumprida.
  • PRs abertos revistos por um colega do grupo até terça à noite; nada entra em main sem revisão.
  • Quem fez o exercício dos haptics: pede a revisão do PR e faz merge ainda hoje.

Para ler

  • Sensors overview no Android: as categorias de sensores, as taxas de amostragem e o custo em bateria.
  • Bluetooth Low Energy overview no Android: central, periférico, GATT e as permissões por versão.
  • Core NFC na Apple: sessões de leitura, NDEF e o que o iOS deixa uma app fazer.
  • sensors_plus: os streams de cada sensor e o samplingPeriod.
  • nfc_manager: configuração Android e iOS, leitura e escrita NDEF.