This example demonstrates how to integrate the SpeedOf.Me speed test API into an Android app using WebView.
The SpeedOf.Me API is JavaScript-based, so Android apps use WebView to:
speedtest.html to app/src/main/assets/SpeedTestActivity.kt to your source directorySomApi.account = "YOUR_API_KEY";
SomApi.domainName = "your-domain.com";
<uses-permission android:name="android.permission.INTERNET" />
Android App
└── SpeedTestActivity (Compose)
└── WebView
└── speedtest.html
└── SomApi.js
▼
window.Android.onMessage(json)
▼
@JavascriptInterface onMessage()
The HTML page sends messages via:
window.Android.onMessage(JSON.stringify({
type: 'completed',
data: result
}));
Kotlin receives them via @JavascriptInterface:
class SpeedTestJsInterface(private val viewModel: SpeedTestViewModel) {
@JavascriptInterface
fun onMessage(json: String) {
viewModel.handleMessage(json)
}
}
// Add to WebView
webView.addJavascriptInterface(
SpeedTestJsInterface(viewModel),
"Android" // This becomes window.Android in JS
)
webView.loadUrl("file:///android_asset/speedtest.html")
webView.loadUrl("https://your-domain.com/speedtest.html")
webView.settings.apply {
javaScriptEnabled = true // Required
domStorageEnabled = true // Recommended
mixedContentMode = WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE
}
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
local.properties or BuildConfigwebView.destroy() in onDestroy()assets/ directoryrunOnUiThread {} for UI updates