- cross-platform (Android & iOS) support
- persistent sampling state management
- multiple wearable/device integrations
- configurable data sampling and transformation
- pluggable data management and upload strategies
What data can you collect?
Onboard Phone Sensors
Collect movement data (IMU), location, nearby devices, steps, screen events, and many other measures
Wearable Devices
Collect data from smartwatches (e.g. Apple Watch), heart rate monitors (e.g., Polar), ECG monitors, glucose monitors, iBeacons, and other devices.
User-generated Data
Collect surveys, questionnaires, ecological momentary assessments (EMAs), audio, video, and sound from participants
Cognitive Assessment
Choose from 14 predefined cognitive assessment tools like trail-making, reaction time, recall, flanker, and object tracking tests
Documentation map
Install and Configure
Set up the package and platform configuration on both Android and iOS.
Software Architecture
Runtime architecture with client manager, service, and sampling layers.
Domain Model
Study protocols, triggers, tasks, measures, devices, and measurements.
Using CAMS
End-to-end flow from protocol definition to runtime data streams.
AppTask Model
User-facing tasks, queueing, notifications, and execution lifecycle.
How it works
The code listing below shows a simple Dart example of how to add sampling to a Flutter app. This basic example illustrates how sampling is configured, deployed, initialized, and used in three basic steps;1
Define Study Protocol
Create a
SmartphoneStudyProtocol which defines what measures to collect from different devices.2
Create and Configure Runtime
Configure the
SmartPhoneClientManager and add the study protocol to it.3
Start Data Sampling
Access the collected stream of measurements and use them in the app and control the execution of the data sampling.
Example
Below is a simple example of how to set up a protocol that samples step counts, ambient light, screen events, and battery events.Minimalistic example
In the example above, the client manager is configured, the protocol is added, and sampling is started. This can actually be done in one line of code, like this:Continue reading
Extending CAMS
Add custom triggers, probes, data managers, and transformer schemas.
Best Practice
Android/iOS setup recommendations, permissions, and troubleshooting.
Measure Types
Supported measure types across built-in and external sampling packages.
Data Managers
File, SQLite, Firebase, and CAWS storage/upload options.