Beyond Heart Rate Sensing.

既存システムを「糖質応答」「熱中症・脱水リスク」の統合監視エンジンへ進化させる

「心拍数」「環境温湿度(WBGT)」のみに依存した熱中症対策システムをさらにグレードアップ

Android標準のインテント機能を利用した、超高速・超軽量なアプリ間ダイレクト統合基盤(CarbSens API)

CarbSens アプリ間インテント連携仕様書
(APIドキュメント)

本仕様書は、外部のアプリケーションからAndroidのインテント(Intent)機能/ iPhoneのURL scheme機能を活用し、CarbSensの高度な脈波解析エンジンをダイレクトに呼び出して利用するための開発者向けドキュメントです。

iPhone URLScheme アプリ連携はこちら

💡 貴社のニーズに合わせて選べる2つの連携パターン

CarbSensとのシステム連携には、以下の2つのアプローチが用意されています。用途に合わせて最適なパターンを選択してください。


【🛍️ パターン1】データ持ち込み型連携 仕様

外部アプリからCarbSensアプリへ、端末内のRAM(メモリ)上で直接CSV形式の脈波データを引き渡します(ファイル保存は不要です)。CarbSensアプリは待機状態から自動復帰し、データをサーバーへアップロードして解析を開始します。

🛍️1. インテント仕様(送信側実装)

添付データ(Intent Extras)

キー(Key) 型(Type) 説明 備考
EXTRA_CSV_TEXT String 解析対象のCSVテキストデータ(最大1MBまで) 必須
EXTRA_SAMPLING_RATE Int <データのサンプリング周波数(Hz) 必須(200Hz以上推奨)
EXTRA_FILE_NAME String 管理用の仮ファイル名(拡張子は .csv) 任意(現在未使用)

🛍️ 2. 送信側(貴社アプリ)の実装コード例 (Kotlin)。



val finalCsvString = "830400563245156352,-300909,0,0,0\n830400563250838144,-301048,0,0,0\n..."

val intent = Intent("com.carbsens.action.ANALYZE_PPG").apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    //setPackage("com.carbsensのアプリアプリパッケージ名") // ターゲット制限

    // メモリ(String)でCSVデータを直接渡す
    putExtra("EXTRA_CSV_TEXT", finalCsvString) 
    // サンプリング周波数を指定(CarbSens側で自動調整します)
    putExtra("EXTRA_SAMPLING_RATE", 200) 
    // 識別用のファイル名
    //putExtra("EXTRA_FILE_NAME", "PolarPPG_Measurement.csv")
}

try {
    startActivity(intent)
} catch (e: ActivityNotFoundException) {
    // CarbSensアプリがインストールされていない場合の処理
}


🛍️ 3. 受信側(貴社アプリ)の受け取り実装例 (Kotlin)

CarbSensアプリ側では、インテントを検知した際に以下のロジックでメモリ(String)から直接CSVデータを復元し、指定されたサンプリング周波数(Hz)を元に自動調整を行ってから解析へ進みます。
解析結果を戻します。

      // ★★★ 自動受信はここに書く ★★★
        if (intent?.action == "com.sendtocarb.action.RESULT") {
            Log.d("SendToCarb", "Intent CALLED, action=${intent?.action}")
            val result = intent.getStringExtra("result_text") ?: "No result"
            resultTextView.text = result
        }

}

🛍️ 4. 推奨する入力データ構造 (EXTRA_CSV_TEXT)

☀️ 【技術注記】熱中症・脱水リスク解析の仕組み

CarbSensサーバーは以下の2つの指標を同時に算出します。

  1. 水分状態変化(脱水リスク): 脱水に伴う末梢血管の容積変化(脈波振幅の微細な縮小)を捉え、水分不足の度合いを判定。
  2. Carb値(生体エネルギー充填度): 過酷な労働環境における糖質エネルギーの枯渇をモニタリング。糖質不足による自律神経の乱れや体温調節機能(発汗)のストップを未然に防ぐインジケーターとして機能します。

※単なる心拍数や環境温度(WBGT)の監視にとどまらず、「水分補給」と「糖質エネルギー補給(スポーツドリンクの推奨等)」の最適なタイミングの判定をアシストします。



【🚀 パターン2】直接測定依頼型連携 仕様

外部アプリ内の「測定開始」ボタン等からインテントを発行し、CarbSensアプリを直接呼び出してその場で新規測定を自動で開始させます。貴社側で脈波データを保持・加工する必要がないため、最も手軽に機能を統合できます。

🚀 1. インテント仕様(送信側実装)

🚀 2. 送信側(貴社アプリ)の実装コード例 (Kotlin)

sendMeasureButton.setOnClickListener {
    val intent = Intent("com.carbsens.action.START_MEASUREMENT").apply {
        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        setPackage("貴社のCarbSensアプリのパッケージ名")
    }
    try {
        startActivity(intent)
    } catch (e: ActivityNotFoundException) {
        // CarbSensアプリが未インストールの場合の処理
    }
}

🚀 3. 受信側(CarbSensアプリ)の挙動

CarbSensアプリは launchMode="singleTask"(または singleTop)でバックグラウンドから復帰するため、既存のタスク状態を維持したまま最前面に表示されます。アクション(START_MEASUREMENT)を検知すると、ユーザーの操作を挟むことなく自動的に新規測定と解析リクエストを実行します。




📱 CarbSens URL Scheme 連携 仕様書(最小版)

本本仕様書は、外部アプリケーションから CarbSens iOS アプリを URL Scheme で直接呼び出すための最小限の技術仕様 です。 Intent を持たない iOS において、Android 版の パターン1 / パターン2 に相当する連携を URL Scheme で実現します

💡 貴連携パターン(Android Intent と同等)

🛍️ パターン1:データ持ち込み型 URL Scheme

■ URL Scheme(呼び出し形式)

carbsens://process?
    csv=<URLエンコード済みCSV文字列>&
    samplingHz=<サンプリング周波数Hz>&
    bodyPart=<測定部位名>

■ パラメータ仕様

キー説明備考
csvStringCSV テキスト(URL エンコード必須)最大 1MB(推奨 100KB 以下)
samplingHzIntサンプリング周波数(Hz)200Hz 以上推奨
bodyPartString測定部位名左手首甲など

■ CSV データ構造(Android と同一)

[timestamp],[ppg_processed],0,0,0\n

■ コード例


//let csv = "timestamp,123,0,0,0\n..."

   // ★ メモリ渡し(UIPasteboard)版 ★
    func sendToCarbSens(csv: String) {

        // ① CSV をメモリ(UIPasteboard)に保存
        UIPasteboard.general.string = csv
        print("CSV を UIPasteboard に保存しました")

        // ② CarbSens を起動し、source=pasteboard を渡す
        let callback = "sendtocarb://result"
            .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""

        // ★ 追加:部位とサンプリング周波数
        let bodyPart = "右手平".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
        let samplingHz = "180"

        let urlString =
            "carbsens://process?callback=\(callback)&source=pasteboard&bodyPart=\(bodyPart)&samplingHz=\(samplingHz)"


        if let url = URL(string: urlString) {
            UIApplication.shared.open(url)
        } else {
            print("URL 作成失敗:", urlString)
        }
    }

🚀 パターン2:直接測定依頼型 URL Scheme

■ コード例


    // CarbSens を単に起動する
    func openCarbSens() {
        let callback = "sendtocarb://result"
            .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""

        let urlString = "carbsens://process?callback=\(callback)"

        if let url = URL(string: urlString) {
            UIApplication.shared.open(url)
        } else {
            print("URL 作成失敗:", urlString)
        }
    } 

CarbSens アプリが起動し、即座に新規測定を開始します。
外部アプリ側でデータ保持は不要です。


🧩 Android Intent 仕様との対応表

Android IntentiOS URL Scheme
com.carbsens.action.ANALYZE_PPGcarbsens://analyze
com.carbsens.action.START_MEASUREMENTcarbsens://start
EXTRA_CSV_TEXTcsv=
EXTRA_SAMPLING_RATErate=
EXTRA_FILE_NAMEname=

CarbSens 技術連携について問い合わせる


⚠️注意事項 / Important Notice CarbSens Watch/Dualは、日常の健康管理をサポートするためのツールです。本製品は医療機器ではなく、診断、治療、または病気の予防を目的としたものではありません。測定結果や推定値は参考情報としてご利用いただき、健康に関する重要な決定を行う際には、必ず医療専門家にご相談ください。なお、研究目的でのご利用を検討される場合は、所属機関の指針に基づき、適切な手続きをご確認ください。 CarbSens Watch/Dual is a tool designed to support daily health management. It is not a medical device and is not intended for diagnosis, treatment, or disease prevention. Measurement results and estimates are for reference only. Please consult a healthcare professional before making any important health-related decisions.For research use, please follow your institution’s guidelines and confirm any necessary procedures.

技術提携・実証実験(PoC)に関するお問い合わせ

CarbSensの脈波解析エンジンは、国内外の様々なウェアラブルデバイスやセンサーシステムとの統合が可能です。「自社のデバイスで取得した脈波データが解析可能かテストしたい」「テスト用のサンプルアプリ(送信側)のソースコードが欲しい」など、技術的なご相談は以下のフォームよりお気軽にお問い合わせください。

一般社団法人 日本健康開発機構
jawda (Japan Wellness Development Agency)
問い合わせはこちら