如何在我的 Android 应用程序中以编程方式检测浏览器版本。?

问题描述 投票:0回答:2

我目前正在开发一个android应用程序,需要获取浏览器版本。 所以请给我提供 Android 代码。

android browser
2个回答
2
投票

使用 getUserAgentString() 获取浏览器版本。

请参阅下面的链接。

http://developer.android.com/reference/android/webkit/WebSettings.html


0
投票

这个聚会太晚了!但我想如果我向你展示我的方法,那将是一个好主意。特别是我没有使用 WebView。

要点可在:https://gist.github.com/Hesamedin/3e0766a8ee743488e61c2386af6d6f69

最终结果会是这样的:

浏览器信息:{ 应用程序名称:Samsung Internet,版本:1230101502, 包名称:com.sec.android.app.sbrowser }

您可以在 Activity/Fragment 中使用此扩展功能。

private fun logBrowserInfo() {
    val pair = this.getDefaultBrowserInfo()
    val info = pair.first
    val error = pair.second
}

上下文扩展

fun Context?.getDefaultBrowserInfo(): Pair<String, Exception?> {
    val ctx = this ?: return Pair("", null)
    var browserInfo = ""
    var error: Exception? = null
    try {
        val packageManager = ctx.packageManager
        browserInfo = packageManager.defaultBrowserInfo()
    } catch (e: PackageManager.NameNotFoundException) {
        e.printStackTrace()
        error = e
    }
    return Pair(browserInfo, error)
}

private fun PackageManager.defaultBrowserInfo(): String {
    val browserIntent = Intent("android.intent.action.VIEW", Uri.parse("http://"))
    var appName = ""
    var appVersion = ""
    var packageName = ""
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        val resolveInfo = resolveActivity(
            browserIntent,
            PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY.toLong())
        )
        packageName += resolveInfo?.activityInfo?.packageName
        appName += resolveInfo?.loadLabel(this)
        val packageInfo = this.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0))
        appVersion += getPackageVersion(packageInfo)
    } else {
        val resolveInfo = @Suppress("DEPRECATION") resolveActivity(
            browserIntent,
            PackageManager.MATCH_DEFAULT_ONLY
        )
        packageName += resolveInfo?.activityInfo?.packageName
        val packageInfo = @Suppress("DEPRECATION") this.getPackageInfo(packageName, 0)
        appVersion += getPackageVersion(packageInfo)
    }

    val sb = StringBuilder()
    sb.append("BrowserInformation: { ")
    sb.append("AppName: ").append(appName).append(", ")
    sb.append("Version: ").append(appVersion).append(", ")
    sb.append("PackageName: ").append(packageName)
    sb.append(" }")
    return sb.toString()
}

private fun getPackageVersion(packageInfo: PackageInfo): String {
    try {
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            packageInfo.longVersionCode.toString()
        } else {
            @Suppress("DEPRECATION") packageInfo.versionCode.toString()
        }
    } catch (e: PackageManager.NameNotFoundException) {
        e.printStackTrace()
    }
    return "N/A"
}
© www.soinside.com 2019 - 2024. All rights reserved.