Crea APK gratis

Funzioni del dispositivo

Sensori, file e lavori in background

Associa sensori fitness BLE, ricevi file FIT/GPX/TCX, esegui lavori ad app chiusa

Attiva 'Receive Shares From Other Apps' nella procedura guidata e spunta ciò che la tua app accetta: testo e link, file di dati (FIT, GPX, TCX, CSV, JSON, XML…), foto, video, audio, documenti. La tua app appare in DUE posti, esattamente per quei tipi:

  1. Il pannello 'Apri con' di Android quando un utente tocca un file.
  2. Il pannello CONDIVIDI / ESPORTA che mostrano le altre app, inclusi i dispositivi sportivi che esportano file di allenamento (.fit, .gpx, .tcx). La maggior parte delle app fitness esporta tramite Condividi, ed è per questo che le app che registrano solo 'Apri con' non compaiono lì.

Chiedi il file con AppMint.getOpenedFile(): aspetta te, per quanto tardi parta la tua pagina. f.kind è image, video, audio, document o data. I formati di testo (gpx, tcx, csv, json, xml…) arrivano come f.text già pronto; i piccoli binari (.fit) come f.base64; ogni file di dati e documento come un vero File in f.file. Foto, video e audio arrivano come f.url, un indirizzo in streaming per <video src> / <img src>, con f.getFile() quando servono i byte. Non c'è limite di dimensione. Un link o una didascalia condivisi si leggono con WebToApk.getSharedText().

// Ask on startup — the file waits, however late your page mounts
const f = await AppMint.getOpenedFile();   // null if opened normally
if (f) {
  if (f.name.endsWith('.gpx') || f.name.endsWith('.tcx')) {
    const xml = new DOMParser().parseFromString(f.text, 'text/xml');
    const points = xml.querySelectorAll('trkpt, Trackpoint');
    console.log('workout with ' + points.length + ' points');
  } else if (f.name.endsWith('.fit')) {
    // .fit is binary — a real File; parse its bytes
    parseFit(new Uint8Array(await f.file.arrayBuffer())); // e.g. fit-file-parser
  } else if (f.kind === 'video') {
    document.querySelector('video').src = f.url;   // streams from disk, seekable
  }
}

// A shared link or caption
const shared = JSON.parse(WebToApk.getSharedText() || 'null');
if (shared) console.log('shared:', shared.url || shared.text);

2Associa sensori fitness Bluetooth (frequenza cardiaca, velocità , cadenza…)#

Attiva l'autorizzazione Bluetooth nella procedura guidata e la tua app potrГ associare sensori BLE standard: ogni fascia toracica e sensore per bici conformi usano gli stessi profili Bluetooth ufficiali, quindi non serve codice per marchio:

  • Fasce cardio в†’ bpm
  • Sensori di velocitГ /cadenza в†’ km/h + giri pedale al minuto
  • Misuratori di potenza в†’ watt
  • Footpod da corsa в†’ passo + passi/min
  • Livello della batteria di ogni sensore

Flusso: scansione (15 s) в†’ l'utente sceglie un dispositivo в†’ connessione. I dati arrivano poi come eventi. La velocitГ richiede la dimensione della tua ruota; impostala una volta (predefinita 2096mm = ruota da strada 700x23c).

// 1. Scan — each found sensor fires a 'device' event:
window.addEventListener('appmint:ble', function (e) {
  const m = e.detail;
  if (m.kind === 'device') {
    // {address, name, sensors:['heart_rate','speed_cadence',...], rssi}
    addToPickerUI(m);
  }
  if (m.kind === 'data') {
    if (m.type === 'heart_rate')     showBpm(m.data.bpm);
    if (m.type === 'speed_cadence') {
      if (m.data.speedKmh)   showSpeed(m.data.speedKmh.toFixed(1));
      if (m.data.cadenceRpm) showCadence(Math.round(m.data.cadenceRpm));
    }
    if (m.type === 'power')   showWatts(m.data.watts);
    if (m.type === 'battery') showBattery(m.data.percent);
  }
  if (m.kind === 'error') console.warn('BLE:', m.error);
});

WebToApk.bleSetWheelCircumference(2105); // your wheel, in mm
WebToApk.bleStartScan();

// 2. When the user taps a device from your picker:
WebToApk.bleConnect(device.address);

// 3. Done training:
WebToApk.bleDisconnect();

3Lavori in background e salvataggio automatico duraturo (WorkManager)#

JavaScript non puГІ girare mentre la tua app ГЁ chiusa: ГЁ Android, non AppMint. CiГІ che PUГ’ girare ГЁ un lavoro di consegna nativo che la tua pagina affida al sistema. Due strumenti:

  1. workEnqueueOnline - consegna duratura singola. Salvataggio automatico perfetto: consegna i dati e vengono inviati in POST al tuo server quando c'ГЁ rete, con nuovi tentativi progressivi, sopravvivendo a chiusure dell'app e riavvii. Riusando lo stesso id del lavoro, il salvataggio in attesa viene sostituito con lo stato piГ№ recente.
  1. workSchedulePeriodic - una chiamata HTTP nativa ricorrente (trigger di sincronizzazione, heartbeat). L'intervallo minimo di Android ГЁ 15 minuti; valori inferiori vengono portati a quel minimo.

Entrambi consegnano il TUO payload al TUO URL: il lato server è un normale endpoint che hai già (funzione edge di Supabase, la tua API…).

// Durable auto-save: call this on every important change.
function autoSave(state) {
  WebToApk.workEnqueueOnline(
    'autosave',                          // same id → newest state wins
    'https://api.example.com/save',
    'POST',
    JSON.stringify({ 'Authorization': 'Bearer ' + token }),
    JSON.stringify(state)
  );
}

// Recurring sync every 30 minutes, even if the app is closed:
WebToApk.workSchedulePeriodic(
  'sync', 'https://api.example.com/sync', 'POST', '{}', '', 30
);

// Manage jobs:
WebToApk.workCancel('sync');
WebToApk.workList('req1');
window.addEventListener('appmint:work', function (e) {
  // {id, status:'enqueued'|'scheduled'|'cancelled'|'failed', reason?, intervalMinutes?}
  // or, for workList: {requestId, jobs:[{id, periodic, url, createdAt, pendingDelivery}]}
  console.log('work:', e.detail);
});

4Checklist ed errori comuni#

  • File: l'interruttore deve essere ATTIVO al momento della build: registra la tua app nel manifest di Android, che non puГІ cambiare dopo l'installazione. Ricrea l'app dopo averlo attivato.
  • BLE: l'interruttore dell'autorizzazione Bluetooth deve essere ATTIVO al momento della build. La PRIMA scansione chiede all'utente l'autorizzazione di runtime (Android 12+: 'Dispositivi nelle vicinanze'; precedenti: Posizione: ГЁ una regola di Android per la scansione BLE, la tua app non legge la posizione).
  • BLE: associa nella TUA app, non nelle impostazioni Bluetooth di Android: i sensori fitness BLE non sono dispositivi associati classici.
  • Lavori in background: non programmare un lavoro periodico per 'eseguire il codice della mia pagina': consegna HTTP al tuo server. Se ti serve elaborazione sul dispositivo ad app chiusa, serve a questo l'endpoint di consegna.
  • Salvataggio automatico: sempre lo STESSO id del lavoro. Id diversi accodano piГ№ salvataggi obsoleti.

Questa pagina è generata dalla Guida all'integrazione all'interno dell'app stessa, quindi dice esattamente ciò che dice la versione attuale. Leggila in Markdown.

Verificato rispetto alla guida distribuita il 22/10/2026.