This page is for developers who can edit and build the host app. To try the features first, use the no-code walkthrough or test-app guide above.
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.
Use SDK 0.2.0-rc.3, declared minSdk 26, compileSdk 35 and JDK/JVM target 17. The example is built with AGP 8.7.3, Kotlin 2.0.21 and Gradle 8.14.3. This RC is for integration evaluation; it is not certification of every manufacturer device.
Use a StreamZet SDK key and your own account. For evaluation, use sz_test_public. The SDK manages endpoints and the public transport key; no separate environment variables or URLs are required. Public APKs already include the evaluation key.
Copy the ZIP’s maven directory to vendor/streamzet-maven in your host project. Paths below are relative to the host project root. Preserve the POM and Gradle module files. Third-party dependencies require access to Google Maven and Maven Central.
This file includes every import, complete UI and public test connection settings. In an existing app, copy initialization, bind, state rendering and start/stop calls. The test project uses package/namespace com.example.support.
kotlin
package com.example.support
import android.os.Bundle
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import androidx.activity.ComponentActivity
import com.streamzet.sdk.StreamzetSupport
import com.streamzet.sdk.SupportConfig
import com.streamzet.sdk.SupportLauncher
/** Public evaluation settings. Pair this device with your own StreamZet account. */
class MinimalSupportActivity : ComponentActivity() {
private lateinit var launcher: SupportLauncher
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val status = TextView(this)
val code = TextView(this)
val start = Button(this).apply { text = "Start support" }
val stop = Button(this).apply { text = "Stop support" }
setContentView(LinearLayout(this).apply {
orientation = LinearLayout.VERTICAL
setPadding(32, 96, 32, 32)
addView(status)
addView(code)
addView(start)
addView(stop)
})
val support = StreamzetSupport.getInstance() ?: StreamzetSupport.initialize(
applicationContext,
SupportConfig(
apiKey = "sz_test_public",
deviceName = "Integration test",
),
)
launcher = SupportLauncher.bind(this, support) { ui ->
status.text = ui.message
code.text = ui.deviceCode.orEmpty()
start.isEnabled = ui.canStart
stop.isEnabled = ui.canStop
}
start.setOnClickListener { launcher.start() }
stop.setOnClickListener { launcher.stop() }
}
}
The AAR merges INTERNET, foreground service/mediaProjection, POST_NOTIFICATIONS and the capture/accessibility services. Inspect Android Studio’s Merged Manifest instead of duplicating them. Each session needs fresh screen-sharing consent; remote input also requires this app’s accessibility permission.
Override the following resource in the host and translate it for your supported languages so the accessibility entry identifies your app. If Android shows restricted settings, follow that device’s approved user/management flow.
xml
<!-- app/src/main/res/values/strings.xml -->
<resources>
<string name="streamzet_accessibility_label">My Store remote support</string>
</resources>
Bind once in Activity.onCreate, not in a button handler or onStart. Rebind the same SDK instance when the Activity is recreated after rotation.
Call start/stop from user actions on the main thread. ACCEPTED acknowledges the request; CONNECTED indicates the session. Drive buttons from canStart/canStop and branch on error, stopReason and preparationError enums.
Do not call SDK stop/close in the business screen’s onStop/onDestroy. Navigation does not end support. Provide an explicit stop button to end capture and input.
Display ui.message, but never compare translated text for program logic. Existing ViewBinding, Compose or Fragment UI can call the launcher owned by the host Activity.
Test sharing, input, stop and reconnect in your signed minified release, beyond a debug build. Updates preserving applicationId, signing identity and app data preserve registration. Clearing data, uninstalling or changing backend may require registration again. The SDK does not update the host APK.