Androidのインテント機能やiPhoneのURLスキームを利用した、超高速・超軽量なアプリ間ダイレクト統合仕様
※貴社アプリケーションへの機能組み込み、商用ライセンスのご購入・導入に関するご相談はページ下部よりお気軽にお問い合わせください。
本仕様書は、外部のアプリケーションから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アプリを直接呼び出してその場で新規測定を自動で開始させます。貴社側で脈波データを保持・加工する必要がないため、最も手軽に機能を統合できます。
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= |
⚠️ 注意事項 / 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.
お問い合わせ
CarbSensは現在、検証段階にあります。食後反応や自律神経反応の可視化に関心をお持ちの方との情報交換や技術相談を受け付けています。詳細を知りたい方は、どうぞお気軽にお問い合わせください。