Android標準のインテント機能を利用した、超高速・超軽量なアプリ間ダイレクト統合基盤(CarbSens API)
本仕様書は、外部のアプリケーションからAndroidのインテント(Intent)機能/ iPhoneのURL scheme機能を活用し、CarbSensの高度な脈波解析エンジンをダイレクトに呼び出して利用するための開発者向けドキュメントです。
CarbSensとのシステム連携には、以下の2つのアプローチが用意されています。用途に合わせて最適なパターンを選択してください。
外部アプリからCarbSensアプリへ、端末内のRAM(メモリ)上で直接CSV形式の脈波データを引き渡します(ファイル保存は不要です)。CarbSensアプリは待機状態から自動復帰し、データをサーバーへアップロードして解析を開始します。
com.carbsens.action.ANALYZE_PPG貴社のCarbSensアプリのパッケージ名Intent.FLAG_ACTIVITY_NEW_TASK| キー(Key) | 型(Type) | 説明 | 備考 |
|---|---|---|---|
| EXTRA_CSV_TEXT | String | 解析対象のCSVテキストデータ(最大1MBまで) | 必須 |
| EXTRA_SAMPLING_RATE | Int | <データのサンプリング周波数(Hz) | 必須(200Hz以上推奨) |
| EXTRA_FILE_NAME | String | 管理用の仮ファイル名(拡張子は .csv) | 任意(現在未使用) |
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アプリがインストールされていない場合の処理
}
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
}
}
\n)[タイムスタンプ],[計算済みの脈波値],0,0,00 で固定(間引き)していただくことで、転送サイズを大幅に削減(100KB以下推奨)でき、超高速な解析が可能となります。CarbSensサーバーは以下の2つの指標を同時に算出します。
※単なる心拍数や環境温度(WBGT)の監視にとどまらず、「水分補給」と「糖質エネルギー補給(スポーツドリンクの推奨等)」の最適なタイミングの判定をアシストします。
外部アプリ内の「測定開始」ボタン等からインテントを発行し、CarbSensアプリを直接呼び出してその場で新規測定を自動で開始させます。貴社側で脈波データを保持・加工する必要がないため、最も手軽に機能を統合できます。
com.carbsens.action.START_MEASUREMENT貴社のCarbSensアプリのパッケージ名Intent.FLAG_ACTIVITY_NEW_TASKsendMeasureButton.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アプリが未インストールの場合の処理
}
}
CarbSensアプリは launchMode="singleTask"(または singleTop)でバックグラウンドから復帰するため、既存のタスク状態を維持したまま最前面に表示されます。アクション(START_MEASUREMENT)を検知すると、ユーザーの操作を挟むことなく自動的に新規測定と解析リクエストを実行します。
本本仕様書は、外部アプリケーションから CarbSens iOS アプリを URL Scheme で直接呼び出すための最小限の技術仕様 です。 Intent を持たない iOS において、Android 版の パターン1 / パターン2 に相当する連携を URL Scheme で実現します
carbsens://process?
csv=<URLエンコード済みCSV文字列>&
samplingHz=<サンプリング周波数Hz>&
bodyPart=<測定部位名>
| キー | 型 | 説明 | 備考 |
|---|---|---|---|
| csv | String | CSV テキスト(URL エンコード必須) | 最大 1MB(推奨 100KB 以下) |
| samplingHz | Int | サンプリング周波数(Hz) | 200Hz 以上推奨 |
| bodyPart | String | 測定部位名 | 左手首甲など |
[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)
}
}
// 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 | iOS URL Scheme |
|---|---|
| com.carbsens.action.ANALYZE_PPG | carbsens://analyze |
| com.carbsens.action.START_MEASUREMENT | carbsens://start |
| EXTRA_CSV_TEXT | csv= |
| EXTRA_SAMPLING_RATE | rate= |
| EXTRA_FILE_NAME | name= |
CarbSensの脈波解析エンジンは、国内外の様々なウェアラブルデバイスやセンサーシステムとの統合が可能です。「自社のデバイスで取得した脈波データが解析可能かテストしたい」「テスト用のサンプルアプリ(送信側)のソースコードが欲しい」など、技術的なご相談は以下のフォームよりお気軽にお問い合わせください。
一般社団法人 日本健康開発機構