Crear APK gratis

API del puente de JavaScript

Health Connect

Lectura y escritura de pasos, distancia, calorías, frecuencia cardíaca, sueño, peso y ejercicio mediante Health Connect de Android, justo para los tipos que marcó la compilación.

AppMint.health ayudante#

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

Ejemplo

Lee y escribe los datos de salud del usuario mediante Health Connect: pasos, distancia, calorías activas, frecuencia cardíaca, sueño, peso y sesiones de ejercicio. Activa Datos de salud (Health Connect) en el paso Acceso del asistente y marca los tipos y si la app lee o escribe cada uno: solo esos se pueden pedir.

Devuelve: cada método devuelve una Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android anterior a 8.0, disabled = opción desactivada). Los demás → {ok: true, …} o {ok: false, code, message} con code disabled, unsupported, not_installed, update_required, not_declared (tipo no marcado en el asistente), permission (el usuario no lo ha concedido), bad-input, blocked (una página de otro sitio), failed. Requiere: la opción del asistente, Android 8.0+ y Health Connect (integrado en Android 14+, una app de Play en versiones anteriores).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Los tiempos son milisegundos (Date.now()), objetos Date o cadenas ISO; las respuestas usan cadenas ISO.

Comprueba y luego pide:

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;
}

Pasos de hoy (totales con aggregate: true, los registros mismos sin él):

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; }) : [];
}

Escribir: un registro o un arreglo:

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 de los 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?} (nombres de Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Agregados: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Notas: Health Connect muestra tu política de privacidad desde su pantalla de permisos: la dirección del paso Finalizar, o la política generada. Antes de publicar en Google Play, completa Contenido de la app → Apps de salud en Play Console con los mismos tipos de datos y por qué la app necesita cada uno; Play revisa los permisos de salud. Health Connect da a una app los últimos 30 días de historial anteriores a su primera concesión. Los métodos directos del puente detrás de esto (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) reciben texto JSON y un id de callback: usa el asistente.

healthIsAvailable puente#

window.WebToApk.healthIsAvailable(callbackId: String)

El estado de Health Connect para esta app; resuelve [callbackId] con `{available, status, read, write}`.

Ejemplo

Documentado junto con AppMint.health: el ejemplo de allí también muestra este.

Lee y escribe los datos de salud del usuario mediante Health Connect: pasos, distancia, calorías activas, frecuencia cardíaca, sueño, peso y sesiones de ejercicio. Activa Datos de salud (Health Connect) en el paso Acceso del asistente y marca los tipos y si la app lee o escribe cada uno: solo esos se pueden pedir.

Devuelve: cada método devuelve una Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android anterior a 8.0, disabled = opción desactivada). Los demás → {ok: true, …} o {ok: false, code, message} con code disabled, unsupported, not_installed, update_required, not_declared (tipo no marcado en el asistente), permission (el usuario no lo ha concedido), bad-input, blocked (una página de otro sitio), failed. Requiere: la opción del asistente, Android 8.0+ y Health Connect (integrado en Android 14+, una app de Play en versiones anteriores).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Los tiempos son milisegundos (Date.now()), objetos Date o cadenas ISO; las respuestas usan cadenas ISO.

Comprueba y luego pide:

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;
}

Pasos de hoy (totales con aggregate: true, los registros mismos sin él):

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; }) : [];
}

Escribir: un registro o un arreglo:

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 de los 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?} (nombres de Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Agregados: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Notas: Health Connect muestra tu política de privacidad desde su pantalla de permisos: la dirección del paso Finalizar, o la política generada. Antes de publicar en Google Play, completa Contenido de la app → Apps de salud en Play Console con los mismos tipos de datos y por qué la app necesita cada uno; Play revisa los permisos de salud. Health Connect da a una app los últimos 30 días de historial anteriores a su primera concesión. Los métodos directos del puente detrás de esto (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) reciben texto JSON y un id de callback: usa el asistente.

healthOpen puente#

window.WebToApk.healthOpen(callbackId: String)

Abre Health Connect, o su página de Play Store cuando no está instalado.

Ejemplo

Documentado junto con AppMint.health: el ejemplo de allí también muestra este.

Lee y escribe los datos de salud del usuario mediante Health Connect: pasos, distancia, calorías activas, frecuencia cardíaca, sueño, peso y sesiones de ejercicio. Activa Datos de salud (Health Connect) en el paso Acceso del asistente y marca los tipos y si la app lee o escribe cada uno: solo esos se pueden pedir.

Devuelve: cada método devuelve una Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android anterior a 8.0, disabled = opción desactivada). Los demás → {ok: true, …} o {ok: false, code, message} con code disabled, unsupported, not_installed, update_required, not_declared (tipo no marcado en el asistente), permission (el usuario no lo ha concedido), bad-input, blocked (una página de otro sitio), failed. Requiere: la opción del asistente, Android 8.0+ y Health Connect (integrado en Android 14+, una app de Play en versiones anteriores).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Los tiempos son milisegundos (Date.now()), objetos Date o cadenas ISO; las respuestas usan cadenas ISO.

Comprueba y luego pide:

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;
}

Pasos de hoy (totales con aggregate: true, los registros mismos sin él):

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; }) : [];
}

Escribir: un registro o un arreglo:

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 de los 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?} (nombres de Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Agregados: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Notas: Health Connect muestra tu política de privacidad desde su pantalla de permisos: la dirección del paso Finalizar, o la política generada. Antes de publicar en Google Play, completa Contenido de la app → Apps de salud en Play Console con los mismos tipos de datos y por qué la app necesita cada uno; Play revisa los permisos de salud. Health Connect da a una app los últimos 30 días de historial anteriores a su primera concesión. Los métodos directos del puente detrás de esto (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) reciben texto JSON y un id de callback: usa el asistente.

healthRead puente#

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

Lee registros de [type] (o totales con `aggregate:true`) entre `start` y `end` de [optionsJson].

Ejemplo

Documentado junto con AppMint.health: el ejemplo de allí también muestra este.

Lee y escribe los datos de salud del usuario mediante Health Connect: pasos, distancia, calorías activas, frecuencia cardíaca, sueño, peso y sesiones de ejercicio. Activa Datos de salud (Health Connect) en el paso Acceso del asistente y marca los tipos y si la app lee o escribe cada uno: solo esos se pueden pedir.

Devuelve: cada método devuelve una Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android anterior a 8.0, disabled = opción desactivada). Los demás → {ok: true, …} o {ok: false, code, message} con code disabled, unsupported, not_installed, update_required, not_declared (tipo no marcado en el asistente), permission (el usuario no lo ha concedido), bad-input, blocked (una página de otro sitio), failed. Requiere: la opción del asistente, Android 8.0+ y Health Connect (integrado en Android 14+, una app de Play en versiones anteriores).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Los tiempos son milisegundos (Date.now()), objetos Date o cadenas ISO; las respuestas usan cadenas ISO.

Comprueba y luego pide:

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;
}

Pasos de hoy (totales con aggregate: true, los registros mismos sin él):

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; }) : [];
}

Escribir: un registro o un arreglo:

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 de los 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?} (nombres de Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Agregados: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Notas: Health Connect muestra tu política de privacidad desde su pantalla de permisos: la dirección del paso Finalizar, o la política generada. Antes de publicar en Google Play, completa Contenido de la app → Apps de salud en Play Console con los mismos tipos de datos y por qué la app necesita cada uno; Play revisa los permisos de salud. Health Connect da a una app los últimos 30 días de historial anteriores a su primera concesión. Los métodos directos del puente detrás de esto (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) reciben texto JSON y un id de callback: usa el asistente.

healthRequestPermissions puente#

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

Abre la pantalla de permisos de Health Connect para [requestJson] `{read:[…], write:[…]}`; se resuelve con `{granted, denied}`.

Ejemplo

Documentado junto con AppMint.health: el ejemplo de allí también muestra este.

Lee y escribe los datos de salud del usuario mediante Health Connect: pasos, distancia, calorías activas, frecuencia cardíaca, sueño, peso y sesiones de ejercicio. Activa Datos de salud (Health Connect) en el paso Acceso del asistente y marca los tipos y si la app lee o escribe cada uno: solo esos se pueden pedir.

Devuelve: cada método devuelve una Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android anterior a 8.0, disabled = opción desactivada). Los demás → {ok: true, …} o {ok: false, code, message} con code disabled, unsupported, not_installed, update_required, not_declared (tipo no marcado en el asistente), permission (el usuario no lo ha concedido), bad-input, blocked (una página de otro sitio), failed. Requiere: la opción del asistente, Android 8.0+ y Health Connect (integrado en Android 14+, una app de Play en versiones anteriores).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Los tiempos son milisegundos (Date.now()), objetos Date o cadenas ISO; las respuestas usan cadenas ISO.

Comprueba y luego pide:

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;
}

Pasos de hoy (totales con aggregate: true, los registros mismos sin él):

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; }) : [];
}

Escribir: un registro o un arreglo:

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 de los 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?} (nombres de Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Agregados: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Notas: Health Connect muestra tu política de privacidad desde su pantalla de permisos: la dirección del paso Finalizar, o la política generada. Antes de publicar en Google Play, completa Contenido de la app → Apps de salud en Play Console con los mismos tipos de datos y por qué la app necesita cada uno; Play revisa los permisos de salud. Health Connect da a una app los últimos 30 días de historial anteriores a su primera concesión. Los métodos directos del puente detrás de esto (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) reciben texto JSON y un id de callback: usa el asistente.

healthWrite puente#

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

Escribe los registros de [recordsJson] (un arreglo) como [type]; se resuelve con sus ids.

Ejemplo

Documentado junto con AppMint.health: el ejemplo de allí también muestra este.

Lee y escribe los datos de salud del usuario mediante Health Connect: pasos, distancia, calorías activas, frecuencia cardíaca, sueño, peso y sesiones de ejercicio. Activa Datos de salud (Health Connect) en el paso Acceso del asistente y marca los tipos y si la app lee o escribe cada uno: solo esos se pueden pedir.

Devuelve: cada método devuelve una Promise. isAvailable() → {ok: true, available, status, read, write} (status: available, not_installed, update_required, unsupported = Android anterior a 8.0, disabled = opción desactivada). Los demás → {ok: true, …} o {ok: false, code, message} con code disabled, unsupported, not_installed, update_required, not_declared (tipo no marcado en el asistente), permission (el usuario no lo ha concedido), bad-input, blocked (una página de otro sitio), failed. Requiere: la opción del asistente, Android 8.0+ y Health Connect (integrado en Android 14+, una app de Play en versiones anteriores).

Tipos: steps, distance, calories, heartRate, sleep, weight, exercise. Los tiempos son milisegundos (Date.now()), objetos Date o cadenas ISO; las respuestas usan cadenas ISO.

Comprueba y luego pide:

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;
}

Pasos de hoy (totales con aggregate: true, los registros mismos sin él):

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; }) : [];
}

Escribir: un registro o un arreglo:

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 de los 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?} (nombres de Health Connect como running, walking, biking, swimming_pool, yoga, strength_training, other_workout). Agregados: steps {count}, distance {meters}, calories {kilocalories}, heartRate {avg, min, max}, sleep / exercise {minutes}, weight {avg, min, max} (kg).

Notas: Health Connect muestra tu política de privacidad desde su pantalla de permisos: la dirección del paso Finalizar, o la política generada. Antes de publicar en Google Play, completa Contenido de la app → Apps de salud en Play Console con los mismos tipos de datos y por qué la app necesita cada uno; Play revisa los permisos de salud. Health Connect da a una app los últimos 30 días de historial anteriores a su primera concesión. Los métodos directos del puente detrás de esto (healthIsAvailable, healthRequestPermissions, healthRead, healthWrite, healthOpen) reciben texto JSON y un id de callback: usa el asistente.

Generado a partir del runtime de la app y sus archivos de ejemplo en cada compilación de la documentación. Léelo como Markdown · Todas las familias.

Comprobado con el puente publicado el 2026-10-22.