audio-streaming
Receive synchronized PCM audio frames through a Camera stream on Android
MockDeviceKit for testing without physical glasses hardware
$ npx -y skills add facebook/meta-wearables-dat-android --skill mockdevice-testing --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/mockdevice-testingContext preview
The summary Claude sees to decide when to auto-load this skill.
MockDeviceKit for testing without physical glasses hardware
name: mockdevice-testing description: MockDeviceKit for testing without physical glasses hardware
Use MockDeviceKit to test DAT SDK integrations without physical Meta glasses.
MockDeviceKit simulates Meta glasses behavior for development and testing. It provides:
Add `mwdat-mockdevice` to your Gradle dependencies:
dependencies {
implementation(libs.mwdat.mockdevice)
}import com.meta.wearable.dat.mockdevice.MockDeviceKit import com.meta.wearable.dat.mockdevice.api.MockDeviceKitConfig val mockDeviceKit = MockDeviceKit.getInstance(context) // Attach fake registration and connectivity (auto-initializes Wearables if needed). // By default, Wearables.registrationState transitions to Registered. mockDeviceKit.enable() // Or start in unregistered state to test registration flows: // mockDeviceKit.enable(MockDeviceKitConfig(initiallyRegistered = false)) val device = mockDeviceKit.pairGlasses(GlassesModel.RAYBAN_META).getOrThrow()
You can check `mockDeviceKit.isEnabled` to query whether the mock environment is active.
// Simulate glasses lifecycle device.powerOn() device.unfold() device.don() // Simulate wearing the glasses // Later... device.doff() // Simulate removing device.fold() device.powerOff()
MockDeviceKit provides `permissions` to control permission behavior without the Meta AI app.
By default, `RequestPermissionContract` returns `Granted`. Use `set()` to control `checkPermissionStatus()` and `setRequestResult()` to control request outcomes.
val mockDeviceKit = MockDeviceKit.getInstance(context) // Simulate denied camera permission status mockDeviceKit.permissions.set(Permission.CAMERA, PermissionStatus.Denied) // Simulate denied request result (user tapping "deny") mockDeviceKit.permissions.setRequestResult(Permission.CAMERA, PermissionStatus.Denied)
val camera = device.services.camera camera.setCameraFeed(videoUri)
val camera = device.services.camera camera.setCapturedImage(imageUri)
**Note**: Android doesn't transcode video automatically. Mock video files must be in h.265 format. Use FFmpeg to convert:
ffmpeg -hwaccel videotoolbox -i input.mp4 -c:v hevc_videotoolbox -c:a aac_at -tag:v hvc1 -vf "scale=540:960" output.mov
`setCameraFeed(CameraFacing)` sources frames from the handset camera, so the app needs `android.permission.CAMERA` in the manifest and at runtime. That is not the DAT `Permission.CAMERA` covered by `MockDeviceKitConfig(initialPermissionsGranted = true)` — no real-glasses path needs the handset grant, so an existing integration will never have requested it.
Grant it before calling `setCameraFeed`; in instrumentation tests, `pm grant <your.package> android.permission.CAMERA`. Without it the mock rejects the stream start and the failure names the missing permission. `setCameraFeed(Uri)` has no such requirement.
Create a reusable test base class:
import android.content.Context
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.platform.app.InstrumentationRegistry
import com.meta.wearable.dat.mockdevice.MockDeviceKit
import com.meta.wearable.dat.mockdevice.api.MockDeviceKitInterface
import org.junit.After
import org.junit.Before
import org.junit.Rule
open class MockDeviceKitTestCase<T : Any>(
private val activityClass: Class<T>
) {
@get:Rule
val scenarioRule = ActivityScenarioRule(activityClass)
protected lateinit var mockDeviceKit: MockDeviceKitInterface
protected lateinit var targetContext: Context
@Before
open fun setUp() {
val instrumentation = InstrumentationRegistry.getInstrumentation()
targetContext = instrumentation.targetContext
mockDeviceKit = MockDeviceKit.getInstance(targetContext)
grantRuntimePermissions()
}
@After
open fun tearDown() {
mockDeviceKit.disable()
}
private fun grantRuntimePermissions() {
val packageName = targetContext.packageName
val shell = InstrumentationRegistry.getInstrumentation().uiAutomation
shell.executeShellCommand("pm grant $packageName android.permission.BLUETOOTH_CONNECT")
shell.executeShellCommand("pm grant $packageName android.permission.CAMERA")
}
}The CameraAccess sample app includes a Debug menu for MockDeviceKit:
1. Tap the **Debug icon** to open the MockDeviceKit menu 2. Tap **Pair RayBan Meta** to create a simulated device 3. Use **PowerOn**, **Unfold**, **Don** to simulate glasses states 4. Select video/image files for mock camera feeds 5. Start streaming to see simulated frames
| Type | Formats | |------|---------| | Video | h.264 (AVC), h.265 (HEVC) | | Image | JPEG, PNG |
The Meta Wearables Device Access Toolkit enables developers to utilize Meta's AI glasses to build hands-free wearable experiences into their mobile applications.
Receive synchronized PCM audio frames through a Camera stream on Android
Capture standalone high-quality photos from connected glasses on Android
Session and Stream capability setup, video frames, photo capture, resolution and frame rate configuration
Kotlin patterns, DatResult, session and capability conventions for DAT SDK Android development
Use the Wearables DAT MCP server for live DAT documentation search with `search_dat_docs`, Muse Code, Claude Code, Codex, Cursor,…