Download the files below directly. The downloads guide provides the public test key and configuration; pair the device code in your own account for testing.
Android SDK package
0.2.0-rc.3
Maven repository, AAR, sample source, both test APKs, public test configuration and offline guides.
StreamZet key: sz_test_public for evaluation, or an issued sz_live_ key for tenant enrollment. The SDK manages service endpoints and its public transport key.
deviceName
String · required
Nonblank, at most 128 Kotlin UTF-16 code units (String.length), not bytes.
Seconds, 15–300 inclusive. Negotiation watchdog retries; it does not end sharing consent.
framesPerSecond
Int · 30
Capture request rate, 1–30 inclusive; actual delivered FPS depends on load/network.
maxVideoDimension
Int · 1600
Pixels on longest encoded edge. 0 preserves display resolution; otherwise 640–3840 inclusive. Aspect ratio retained.
Configuration is immutable. Invalid fields throw at construction (IllegalArgumentException; malformed URI syntax may throw URISyntaxException). No network is performed by the constructor. toString redacts credentials.
activity: ComponentActivity before STARTED; support: initialized process instance; listener: SupportUiListener main-thread callback. Once per Activity. Reuse support across rotation; invalid lifecycle/duplicate binding throws IllegalStateException.
state
SupportUiState
Snapshot for rendering. See the state reference for every field.
start()
→ SupportStartResult
Main thread, explicit user action in RESUMED Activity. ACCEPTED only schedules preparation; registration, permissions and connection may still fail.
stop()
→ Unit
Main thread. Cancels preparation or stops active support; repeatable. Destroying the Activity alone only detaches the coordinator.
context: Android Context, retained as applicationContext; config: SupportConfig. Main thread, once per process; duplicate initialization throws IllegalStateException.
getInstance()
→ StreamzetSupport?
Existing process instance, or null before initialize/after close. Does not initialize automatically.
register()
suspend → Result<DeviceRegistration>
Any dispatcher; concurrent calls share one request. Active support returns failure. Network/auth errors return sanitized failure and ERROR/REGISTRATION_FAILED. Closed SDK throws; coroutine cancellation propagates. Registration alone does not share the screen or report online.
state
StateFlow<SupportState>
Read-only latest state. Collect with the host lifecycle.
isControlAvailable
Boolean
Current accessibility input-service availability. true does not prove a viewer is connected or that every widget is controllable.
createScreenCaptureIntent()
→ Intent
Manual flow only: after register, visible user request, main thread, inactive support. Marks AWAITING_CONSENT. Launch through Activity Result API. Missing registration/active/closed state throws IllegalStateException.
onScreenCaptureResult(activity, resultCode, data)
→ Boolean
activity: live Activity; resultCode: system Int; data: Intent?. Consumes one pending result. false for denial, null/stale/duplicate data or service-start failure. true means service start accepted, not connected. Never persist/reuse projection data.
accessibilitySettingsIntent()
→ Intent
Intent for Android accessibility settings; launch from host UI. Does not grant permission.
addListener(listener)
→ Unit
SupportListener receives current and future SupportState on main thread. Duplicate same listener is deduplicated; callback exceptions are isolated.
removeListener(listener)
→ Unit
Main thread. Remove the exact listener instance when the host view is destroyed. Missing listener is harmless.
stop()
→ Unit
Main thread; repeatable, including pending registration/consent. Stops capture/input/signaling; closed SDK is a no-op.
close()
→ Unit
Main thread. Stops support, releases listeners/network resources and clears singleton; repeatable. Use only when the host no longer needs the SDK, not Activity rotation.
Non-suspending lifecycle methods are main-thread APIs; wrong-thread calls may throw IllegalStateException. SupportListener.onStateChanged(state: SupportState) and SupportUiListener.onStateChanged(state: SupportUiState) return Unit. RemoteInputService is registered for Android to bind; do not instantiate or call its framework lifecycle methods.