Criar APK grátis

API da ponte JavaScript

Health Connect

Leitura e gravação de passos, distância, calorias, frequência cardíaca, sono, peso e exercícios pelo Health Connect do Android, exatamente para os tipos marcados no build.

AppMint.health helper#

AppMint.health.isAvailable() / requestPermissions() / read() / write() / openHealthConnect()

Exemplo

Lê e grava os dados de saúde do usuário pelo Health Connect: passos, distância, calorias ativas, frequência cardíaca, sono, peso e sessões de exercício. Ative Dados de saúde (Health Connect) na etapa Acesso do assistente e marque os tipos e se o app lê ou grava cada um - só esses podem ser solicitados.

Retorna: todo método retorna uma Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android abaixo da versão 8.0, disabled = opção desligada). Os demais → {ok: true, …} ou {ok: false, code, message} com code disabled, unsupported, not_installed, update_required, not_declared (tipo não marcado no assistente), permission (o usuário não concedeu), bad-input, blocked (uma página de outro site), failed. Requer: a opção do assistente, Android 8.0+ e o Health Connect (integrado ao Android 14+, um app do Play antes disso).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Os horários são em milissegundos (Date.now()), objetos Date ou strings ISO; as respostas usam strings ISO.

Verifique e depois peça:

async function connectHealth() {
  if (!(window.AppMint && AppMint.health)) return false;          // browser or option off
  var s = await AppMint.health.isAvailable();
  if (s.status === 'not_installed') { await AppMint.health.openHealthConnect(); return false; }
  if (!s.available) return false;
  var r = await AppMint.health.requestPermissions({ read: ['steps', 'heartRate'], write: ['weight'] });
  return r.ok && r.denied.read.length === 0;
}

Passos de hoje (totais com aggregate: true, os próprios registros sem ele):

async function stepsToday() {
  var start = new Date(); start.setHours(0, 0, 0, 0);
  var r = await AppMint.health.read('steps', { start: start, end: new Date(), aggregate: true });
  if (!r.ok) { console.warn(r.code, r.message); return 0; }
  return r.aggregate.count;
}

async function lastNightHeartRate() {
  var end = Date.now(), start = end - 12 * 3600 * 1000;
  var r = await AppMint.health.read('heartRate', { start: start, end: end });
  // r.records = [{start, end, id, samples: [{time, bpm}]}]
  return r.ok ? r.records.flatMap(function (x) { return x.samples; }) : [];
}

Gravar - um registro ou uma lista:

await AppMint.health.write('weight', { time: Date.now(), kilograms: 72.4 });
await AppMint.health.write('exercise', [{
  start: Date.now() - 45 * 60000, end: Date.now(), exerciseType: 'running', title: 'Evening run'
}]);
await AppMint.health.write('steps', { start: Date.now() - 3600000, end: Date.now(), count: 4200 });

Campos dos registros: steps {start, end, count} · distance {start, end, meters} · calories {start, end, kilocalories} · heartRate {start, end, samples: [{time, bpm}]} · sleep {start, end, title?, stages?: [{start, end, stage}]} (awake, sleeping, out_of_bed, light, deep, rem) · weight {time, kilograms} · exercise {start, end, exerciseType, title?} (nomes do Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Totais: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Observações: O Health Connect mostra sua política de privacidade na tela de permissões - o endereço da etapa Finalizar, ou a política gerada. Antes de publicar no Google Play, preencha Conteúdo do app → Apps de saúde no Play Console com os mesmos tipos de dados e o motivo de o app precisar de cada um; o Play analisa as permissões de saúde. O Health Connect dá ao app os últimos 30 dias de histórico anteriores à primeira concessão. Os métodos diretos da ponte por trás disso (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) recebem texto JSON e um id de callback - use o auxiliar.

healthIsAvailable ponte#

window.WebToApk.healthIsAvailable(callbackId: String)

O estado do Health Connect para este app; resolve [callbackId] com `{available, status, read, write}`.

Exemplo

Documentado junto com AppMint.health - o exemplo de lá mostra este também.

Lê e grava os dados de saúde do usuário pelo Health Connect: passos, distância, calorias ativas, frequência cardíaca, sono, peso e sessões de exercício. Ative Dados de saúde (Health Connect) na etapa Acesso do assistente e marque os tipos e se o app lê ou grava cada um - só esses podem ser solicitados.

Retorna: todo método retorna uma Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android abaixo da versão 8.0, disabled = opção desligada). Os demais → {ok: true, …} ou {ok: false, code, message} com code disabled, unsupported, not_installed, update_required, not_declared (tipo não marcado no assistente), permission (o usuário não concedeu), bad-input, blocked (uma página de outro site), failed. Requer: a opção do assistente, Android 8.0+ e o Health Connect (integrado ao Android 14+, um app do Play antes disso).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Os horários são em milissegundos (Date.now()), objetos Date ou strings ISO; as respostas usam strings ISO.

Verifique e depois peça:

async function connectHealth() {
  if (!(window.AppMint && AppMint.health)) return false;          // browser or option off
  var s = await AppMint.health.isAvailable();
  if (s.status === 'not_installed') { await AppMint.health.openHealthConnect(); return false; }
  if (!s.available) return false;
  var r = await AppMint.health.requestPermissions({ read: ['steps', 'heartRate'], write: ['weight'] });
  return r.ok && r.denied.read.length === 0;
}

Passos de hoje (totais com aggregate: true, os próprios registros sem ele):

async function stepsToday() {
  var start = new Date(); start.setHours(0, 0, 0, 0);
  var r = await AppMint.health.read('steps', { start: start, end: new Date(), aggregate: true });
  if (!r.ok) { console.warn(r.code, r.message); return 0; }
  return r.aggregate.count;
}

async function lastNightHeartRate() {
  var end = Date.now(), start = end - 12 * 3600 * 1000;
  var r = await AppMint.health.read('heartRate', { start: start, end: end });
  // r.records = [{start, end, id, samples: [{time, bpm}]}]
  return r.ok ? r.records.flatMap(function (x) { return x.samples; }) : [];
}

Gravar - um registro ou uma lista:

await AppMint.health.write('weight', { time: Date.now(), kilograms: 72.4 });
await AppMint.health.write('exercise', [{
  start: Date.now() - 45 * 60000, end: Date.now(), exerciseType: 'running', title: 'Evening run'
}]);
await AppMint.health.write('steps', { start: Date.now() - 3600000, end: Date.now(), count: 4200 });

Campos dos registros: steps {start, end, count} · distance {start, end, meters} · calories {start, end, kilocalories} · heartRate {start, end, samples: [{time, bpm}]} · sleep {start, end, title?, stages?: [{start, end, stage}]} (awake, sleeping, out_of_bed, light, deep, rem) · weight {time, kilograms} · exercise {start, end, exerciseType, title?} (nomes do Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Totais: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Observações: O Health Connect mostra sua política de privacidade na tela de permissões - o endereço da etapa Finalizar, ou a política gerada. Antes de publicar no Google Play, preencha Conteúdo do app → Apps de saúde no Play Console com os mesmos tipos de dados e o motivo de o app precisar de cada um; o Play analisa as permissões de saúde. O Health Connect dá ao app os últimos 30 dias de histórico anteriores à primeira concessão. Os métodos diretos da ponte por trás disso (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) recebem texto JSON e um id de callback - use o auxiliar.

healthOpen ponte#

window.WebToApk.healthOpen(callbackId: String)

Abre o Health Connect, ou a página dele na Play Store quando não está instalado.

Exemplo

Documentado junto com AppMint.health - o exemplo de lá mostra este também.

Lê e grava os dados de saúde do usuário pelo Health Connect: passos, distância, calorias ativas, frequência cardíaca, sono, peso e sessões de exercício. Ative Dados de saúde (Health Connect) na etapa Acesso do assistente e marque os tipos e se o app lê ou grava cada um - só esses podem ser solicitados.

Retorna: todo método retorna uma Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android abaixo da versão 8.0, disabled = opção desligada). Os demais → {ok: true, …} ou {ok: false, code, message} com code disabled, unsupported, not_installed, update_required, not_declared (tipo não marcado no assistente), permission (o usuário não concedeu), bad-input, blocked (uma página de outro site), failed. Requer: a opção do assistente, Android 8.0+ e o Health Connect (integrado ao Android 14+, um app do Play antes disso).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Os horários são em milissegundos (Date.now()), objetos Date ou strings ISO; as respostas usam strings ISO.

Verifique e depois peça:

async function connectHealth() {
  if (!(window.AppMint && AppMint.health)) return false;          // browser or option off
  var s = await AppMint.health.isAvailable();
  if (s.status === 'not_installed') { await AppMint.health.openHealthConnect(); return false; }
  if (!s.available) return false;
  var r = await AppMint.health.requestPermissions({ read: ['steps', 'heartRate'], write: ['weight'] });
  return r.ok && r.denied.read.length === 0;
}

Passos de hoje (totais com aggregate: true, os próprios registros sem ele):

async function stepsToday() {
  var start = new Date(); start.setHours(0, 0, 0, 0);
  var r = await AppMint.health.read('steps', { start: start, end: new Date(), aggregate: true });
  if (!r.ok) { console.warn(r.code, r.message); return 0; }
  return r.aggregate.count;
}

async function lastNightHeartRate() {
  var end = Date.now(), start = end - 12 * 3600 * 1000;
  var r = await AppMint.health.read('heartRate', { start: start, end: end });
  // r.records = [{start, end, id, samples: [{time, bpm}]}]
  return r.ok ? r.records.flatMap(function (x) { return x.samples; }) : [];
}

Gravar - um registro ou uma lista:

await AppMint.health.write('weight', { time: Date.now(), kilograms: 72.4 });
await AppMint.health.write('exercise', [{
  start: Date.now() - 45 * 60000, end: Date.now(), exerciseType: 'running', title: 'Evening run'
}]);
await AppMint.health.write('steps', { start: Date.now() - 3600000, end: Date.now(), count: 4200 });

Campos dos registros: steps {start, end, count} · distance {start, end, meters} · calories {start, end, kilocalories} · heartRate {start, end, samples: [{time, bpm}]} · sleep {start, end, title?, stages?: [{start, end, stage}]} (awake, sleeping, out_of_bed, light, deep, rem) · weight {time, kilograms} · exercise {start, end, exerciseType, title?} (nomes do Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Totais: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Observações: O Health Connect mostra sua política de privacidade na tela de permissões - o endereço da etapa Finalizar, ou a política gerada. Antes de publicar no Google Play, preencha Conteúdo do app → Apps de saúde no Play Console com os mesmos tipos de dados e o motivo de o app precisar de cada um; o Play analisa as permissões de saúde. O Health Connect dá ao app os últimos 30 dias de histórico anteriores à primeira concessão. Os métodos diretos da ponte por trás disso (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) recebem texto JSON e um id de callback - use o auxiliar.

healthRead ponte#

window.WebToApk.healthRead(type: String, optionsJson: String, callbackId: String)

Lê registros de [type] (ou totais com `aggregate:true`) entre `start` e `end` de [optionsJson].

Exemplo

Documentado junto com AppMint.health - o exemplo de lá mostra este também.

Lê e grava os dados de saúde do usuário pelo Health Connect: passos, distância, calorias ativas, frequência cardíaca, sono, peso e sessões de exercício. Ative Dados de saúde (Health Connect) na etapa Acesso do assistente e marque os tipos e se o app lê ou grava cada um - só esses podem ser solicitados.

Retorna: todo método retorna uma Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android abaixo da versão 8.0, disabled = opção desligada). Os demais → {ok: true, …} ou {ok: false, code, message} com code disabled, unsupported, not_installed, update_required, not_declared (tipo não marcado no assistente), permission (o usuário não concedeu), bad-input, blocked (uma página de outro site), failed. Requer: a opção do assistente, Android 8.0+ e o Health Connect (integrado ao Android 14+, um app do Play antes disso).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Os horários são em milissegundos (Date.now()), objetos Date ou strings ISO; as respostas usam strings ISO.

Verifique e depois peça:

async function connectHealth() {
  if (!(window.AppMint && AppMint.health)) return false;          // browser or option off
  var s = await AppMint.health.isAvailable();
  if (s.status === 'not_installed') { await AppMint.health.openHealthConnect(); return false; }
  if (!s.available) return false;
  var r = await AppMint.health.requestPermissions({ read: ['steps', 'heartRate'], write: ['weight'] });
  return r.ok && r.denied.read.length === 0;
}

Passos de hoje (totais com aggregate: true, os próprios registros sem ele):

async function stepsToday() {
  var start = new Date(); start.setHours(0, 0, 0, 0);
  var r = await AppMint.health.read('steps', { start: start, end: new Date(), aggregate: true });
  if (!r.ok) { console.warn(r.code, r.message); return 0; }
  return r.aggregate.count;
}

async function lastNightHeartRate() {
  var end = Date.now(), start = end - 12 * 3600 * 1000;
  var r = await AppMint.health.read('heartRate', { start: start, end: end });
  // r.records = [{start, end, id, samples: [{time, bpm}]}]
  return r.ok ? r.records.flatMap(function (x) { return x.samples; }) : [];
}

Gravar - um registro ou uma lista:

await AppMint.health.write('weight', { time: Date.now(), kilograms: 72.4 });
await AppMint.health.write('exercise', [{
  start: Date.now() - 45 * 60000, end: Date.now(), exerciseType: 'running', title: 'Evening run'
}]);
await AppMint.health.write('steps', { start: Date.now() - 3600000, end: Date.now(), count: 4200 });

Campos dos registros: steps {start, end, count} · distance {start, end, meters} · calories {start, end, kilocalories} · heartRate {start, end, samples: [{time, bpm}]} · sleep {start, end, title?, stages?: [{start, end, stage}]} (awake, sleeping, out_of_bed, light, deep, rem) · weight {time, kilograms} · exercise {start, end, exerciseType, title?} (nomes do Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Totais: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Observações: O Health Connect mostra sua política de privacidade na tela de permissões - o endereço da etapa Finalizar, ou a política gerada. Antes de publicar no Google Play, preencha Conteúdo do app → Apps de saúde no Play Console com os mesmos tipos de dados e o motivo de o app precisar de cada um; o Play analisa as permissões de saúde. O Health Connect dá ao app os últimos 30 dias de histórico anteriores à primeira concessão. Os métodos diretos da ponte por trás disso (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) recebem texto JSON e um id de callback - use o auxiliar.

healthRequestPermissions ponte#

window.WebToApk.healthRequestPermissions(requestJson: String, callbackId: String)

Abre a tela de permissões do Health Connect para [requestJson] `{read:[…], write:[…]}`; resolve com `{granted, denied}`.

Exemplo

Documentado junto com AppMint.health - o exemplo de lá mostra este também.

Lê e grava os dados de saúde do usuário pelo Health Connect: passos, distância, calorias ativas, frequência cardíaca, sono, peso e sessões de exercício. Ative Dados de saúde (Health Connect) na etapa Acesso do assistente e marque os tipos e se o app lê ou grava cada um - só esses podem ser solicitados.

Retorna: todo método retorna uma Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android abaixo da versão 8.0, disabled = opção desligada). Os demais → {ok: true, …} ou {ok: false, code, message} com code disabled, unsupported, not_installed, update_required, not_declared (tipo não marcado no assistente), permission (o usuário não concedeu), bad-input, blocked (uma página de outro site), failed. Requer: a opção do assistente, Android 8.0+ e o Health Connect (integrado ao Android 14+, um app do Play antes disso).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Os horários são em milissegundos (Date.now()), objetos Date ou strings ISO; as respostas usam strings ISO.

Verifique e depois peça:

async function connectHealth() {
  if (!(window.AppMint && AppMint.health)) return false;          // browser or option off
  var s = await AppMint.health.isAvailable();
  if (s.status === 'not_installed') { await AppMint.health.openHealthConnect(); return false; }
  if (!s.available) return false;
  var r = await AppMint.health.requestPermissions({ read: ['steps', 'heartRate'], write: ['weight'] });
  return r.ok && r.denied.read.length === 0;
}

Passos de hoje (totais com aggregate: true, os próprios registros sem ele):

async function stepsToday() {
  var start = new Date(); start.setHours(0, 0, 0, 0);
  var r = await AppMint.health.read('steps', { start: start, end: new Date(), aggregate: true });
  if (!r.ok) { console.warn(r.code, r.message); return 0; }
  return r.aggregate.count;
}

async function lastNightHeartRate() {
  var end = Date.now(), start = end - 12 * 3600 * 1000;
  var r = await AppMint.health.read('heartRate', { start: start, end: end });
  // r.records = [{start, end, id, samples: [{time, bpm}]}]
  return r.ok ? r.records.flatMap(function (x) { return x.samples; }) : [];
}

Gravar - um registro ou uma lista:

await AppMint.health.write('weight', { time: Date.now(), kilograms: 72.4 });
await AppMint.health.write('exercise', [{
  start: Date.now() - 45 * 60000, end: Date.now(), exerciseType: 'running', title: 'Evening run'
}]);
await AppMint.health.write('steps', { start: Date.now() - 3600000, end: Date.now(), count: 4200 });

Campos dos registros: steps {start, end, count} · distance {start, end, meters} · calories {start, end, kilocalories} · heartRate {start, end, samples: [{time, bpm}]} · sleep {start, end, title?, stages?: [{start, end, stage}]} (awake, sleeping, out_of_bed, light, deep, rem) · weight {time, kilograms} · exercise {start, end, exerciseType, title?} (nomes do Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Totais: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Observações: O Health Connect mostra sua política de privacidade na tela de permissões - o endereço da etapa Finalizar, ou a política gerada. Antes de publicar no Google Play, preencha Conteúdo do app → Apps de saúde no Play Console com os mesmos tipos de dados e o motivo de o app precisar de cada um; o Play analisa as permissões de saúde. O Health Connect dá ao app os últimos 30 dias de histórico anteriores à primeira concessão. Os métodos diretos da ponte por trás disso (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) recebem texto JSON e um id de callback - use o auxiliar.

healthWrite ponte#

window.WebToApk.healthWrite(type: String, recordsJson: String, callbackId: String)

Grava os registros em [recordsJson] (uma lista) como [type]; resolve com os ids deles.

Exemplo

Documentado junto com AppMint.health - o exemplo de lá mostra este também.

Lê e grava os dados de saúde do usuário pelo Health Connect: passos, distância, calorias ativas, frequência cardíaca, sono, peso e sessões de exercício. Ative Dados de saúde (Health Connect) na etapa Acesso do assistente e marque os tipos e se o app lê ou grava cada um - só esses podem ser solicitados.

Retorna: todo método retorna uma Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android abaixo da versão 8.0, disabled = opção desligada). Os demais → {ok: true, …} ou {ok: false, code, message} com code disabled, unsupported, not_installed, update_required, not_declared (tipo não marcado no assistente), permission (o usuário não concedeu), bad-input, blocked (uma página de outro site), failed. Requer: a opção do assistente, Android 8.0+ e o Health Connect (integrado ao Android 14+, um app do Play antes disso).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Os horários são em milissegundos (Date.now()), objetos Date ou strings ISO; as respostas usam strings ISO.

Verifique e depois peça:

async function connectHealth() {
  if (!(window.AppMint && AppMint.health)) return false;          // browser or option off
  var s = await AppMint.health.isAvailable();
  if (s.status === 'not_installed') { await AppMint.health.openHealthConnect(); return false; }
  if (!s.available) return false;
  var r = await AppMint.health.requestPermissions({ read: ['steps', 'heartRate'], write: ['weight'] });
  return r.ok && r.denied.read.length === 0;
}

Passos de hoje (totais com aggregate: true, os próprios registros sem ele):

async function stepsToday() {
  var start = new Date(); start.setHours(0, 0, 0, 0);
  var r = await AppMint.health.read('steps', { start: start, end: new Date(), aggregate: true });
  if (!r.ok) { console.warn(r.code, r.message); return 0; }
  return r.aggregate.count;
}

async function lastNightHeartRate() {
  var end = Date.now(), start = end - 12 * 3600 * 1000;
  var r = await AppMint.health.read('heartRate', { start: start, end: end });
  // r.records = [{start, end, id, samples: [{time, bpm}]}]
  return r.ok ? r.records.flatMap(function (x) { return x.samples; }) : [];
}

Gravar - um registro ou uma lista:

await AppMint.health.write('weight', { time: Date.now(), kilograms: 72.4 });
await AppMint.health.write('exercise', [{
  start: Date.now() - 45 * 60000, end: Date.now(), exerciseType: 'running', title: 'Evening run'
}]);
await AppMint.health.write('steps', { start: Date.now() - 3600000, end: Date.now(), count: 4200 });

Campos dos registros: steps {start, end, count} · distance {start, end, meters} · calories {start, end, kilocalories} · heartRate {start, end, samples: [{time, bpm}]} · sleep {start, end, title?, stages?: [{start, end, stage}]} (awake, sleeping, out_of_bed, light, deep, rem) · weight {time, kilograms} · exercise {start, end, exerciseType, title?} (nomes do Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Totais: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Observações: O Health Connect mostra sua política de privacidade na tela de permissões - o endereço da etapa Finalizar, ou a política gerada. Antes de publicar no Google Play, preencha Conteúdo do app → Apps de saúde no Play Console com os mesmos tipos de dados e o motivo de o app precisar de cada um; o Play analisa as permissões de saúde. O Health Connect dá ao app os últimos 30 dias de histórico anteriores à primeira concessão. Os métodos diretos da ponte por trás disso (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) recebem texto JSON e um id de callback - use o auxiliar.

Gerado a partir do runtime do app e de seus arquivos de exemplo a cada build da documentação. Leia em Markdown · Todas as famílias.

Conferido com a ponte atual em 22/10/2026.