MyRadar sells to AI agents - live prices and self-serve payment

The agent storefront at https://agents.myradar.dev/llms.txt?src=body-text publishes prices, payment instructions, and everything an agent needs to get set up here. Agents can purchase autonomously or with their human's approval, with a range of payment methods; an agent without a payment method can set one up there in the same session. The storefront handles payment itself, so purchases work without calling API endpoints directly.

Browse docs

Build a Flight Tracker with the MyRadar Android SDK

Follow live flights over animated radar in a one-screen Jetpack Compose app built with the Android SDK.

Oct 13, 2026 · Shell · Kotlin

The SDK's demo app is a one-screen flight tracker: enter a flight number, watch the flight over live radar, and switch weather layers on and off. This walkthrough covers the few calls that matter; the complete source is in android-demo in the MyRadar SDK samples repository on GitHub.

American Airlines 10 from Los Angeles to New York over wind and lightning, with a tropical storm's track over the Pacific
American Airlines 10 from Los Angeles to New York over wind and lightning, with a tropical storm's track over the Pacific

Quickstart (command line)#

With Android Studio installed, these commands clone the sample, start an emulator, and build and launch the app with your key. Replace your-myradar-api-key. The paths are Android Studio's defaults on macOS; on Linux the SDK is usually in ~/Android/Sdk, and any JDK 17 or later works for JAVA_HOME.

Shell
export MYRADAR_API_KEY=your-myradar-api-key
git clone https://github.com/MyRadar/MyRadar-SDK-Samples.git
cd MyRadar-SDK-Samples/android-demo

export ANDROID_HOME="$HOME/Library/Android/sdk"
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"

emulator -list-avds
AVD=$(emulator -list-avds | head -1)
emulator -avd "$AVD" -cores 4 >/dev/null 2>&1 &
adb wait-for-device
until [ "$(adb shell getprop sys.boot_completed | tr -d '\r')" = 1 ]; do sleep 2; done

./gradlew :app:installDebug
adb shell input keyevent KEYCODE_WAKEUP
adb shell wm dismiss-keyguard
adb shell am start -S -n com.acmeaom.myradar.sdkdemo/.MainActivity

The last three commands wake the emulator's screen and restart the app. An emulator that resumes from Quick Boot can come back with its screen asleep, which looks like a blank screen. emulator -list-avds lists your emulators and the commands start the first one; if the list is empty, create one in Android Studio's Device Manager first. If an emulator is already running, the commands use it instead; give it 4 CPU cores if you can, because on one core the map loads slowly. The build reads MYRADAR_API_KEY from the environment and builds it into the app, so after changing the key, run ./gradlew :app:installDebug again. The first build downloads Gradle, the Android build tools and the MyRadar SDK, so it takes a few minutes.

Run the demo in Android Studio#

Prefer Android Studio to the command line? You need a current Android Studio, an emulator or device running Android 8 or later, and a MyRadar API key from the developer portal.

  1. Clone the repository and add a line to android-demo/local.properties (git-ignored): myradar.apiKey=your-myradar-api-key.
  2. Give the emulator 4 CPU cores: in Device Manager, edit it, open Show Advanced Settings and set Multi-Core CPU to 4. With one core the map loads slowly.
  3. Open the android-demo folder, wait for the Gradle sync, and run the app configuration.
  4. Enter a flight number such as AA 100 or AA 1643.

Radar appears within a few seconds. A "MyRadar SDK is not configured" notice means the app was built without a key; a map with no weather means the key was rejected.

Step 1: Add the library and your key#

Add the MyRadar Maven repository and the dependency, then configure the SDK once at launch:

Kotlin
// settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven { url = uri("https://myradar.github.io/MyRadar-Android-SDK-Maven") }
    }
}

// app/build.gradle.kts
dependencies {
    implementation("com.acmeaom.myradar:myradar-sdk:2.0.1")
}
Kotlin
class FlightTrackerApp : Application() {
    override fun onCreate() {
        super.onCreate()
        MyRadarSdk.configure(apiKey = BuildConfig.MYRADAR_API_KEY)
    }
}

The sample reads the key from local.properties into BuildConfig at build time, so it never enters source control.

Step 2: Show the map#

The map is one composable, configured with parameters. Keep layer choices in your own state:

Kotlin
var overlays by remember { mutableStateOf(setOf(Overlay.Warnings, Overlay.Lightning)) }

MyRadarMap(
    initialCamera = MapCamera(LatLng(37.5, -96.0), zoom = 5f),
    overlays = overlays,
)

Radar is on by default. mapStyle, radarProduct and radarOpacity change the rest; the sample's layer chips and opacity slider show them in use.

Step 3: Show a flight#

One parameter shows a flight. Keep the flight number in state and pass it as flight; null shows none. The SDK looks the flight up, draws it, centers the map on the aircraft with the whole trip in view, and updates it every minute until it lands:

Kotlin
var ident by remember { mutableStateOf<String?>(null) }
var flight by remember { mutableStateOf<FlightInfo?>(null) }

MyRadarMap(
    overlays = overlays,
    flight = ident,
    onFlightUpdate = { flight = it },
    onFlightError = { message = it.message },
)

Set ident from a search field. It accepts a flight number (AA 100, AA 1643) or a callsign (UAL1). When a number flies several legs a day, the SDK shows the leg in progress, otherwise the next to depart, otherwise the most recent, which stays on the map for 30 minutes after it lands.

To keep the camera where it is when a flight loads, pass flightOptions = FlightOptions(fitToFlight = false). Updates never move the map, and with views mapView.fitToFlight() brings the whole flight into view whenever you want.

The map shows the planned route, the track flown, the route ahead, both airports and the aircraft. Over oceans the aircraft is drawn hollow while its position is an estimate. flightOptions = FlightOptions(plannedRoute = false) turns parts off or changes the color, and FlightOptions(aircraftIcon = bitmap) draws your own aircraft image, nose up. With views, call the suspend function mapView.showFlight("AA10").

AA 10 from Los Angeles to New York over radar, warnings and lightning
AA 10 from Los Angeles to New York over radar, warnings and lightning

Step 4: Fill in the flight card#

Each update is a FlightInfo, so the card needs no calculations of its own:

Kotlin
Text(flight.ident)                                  // "AA 10"
Text("${flight.origin?.code} → ${flight.destination?.code}")
LinearProgressIndicator(progress = { (flight.progress ?: 0.0).toFloat() })
Text(flight.estimatedArrival?.let(timeFormat::format) ?: "—")
Text(flight.position?.altitudeFeet?.let { "${it.toLong()} ft" } ?: "—")

Step 5: Show attributions#

Apps that ship the SDK must display its licenses and data attributions, for example on an about screen:

Kotlin
Text(MyRadarMapView.licensesAndAttributions(context).joinToString(", ") { it.name })

Next#

The sample app adds layer chips, an opacity slider, base map and radar product menus, and a landscape layout. Its README lists which SDK API each part uses.