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.