我目前正在开发一个android应用程序,需要获取浏览器版本。 所以请给我提供 Android 代码。
使用 getUserAgentString() 获取浏览器版本。
请参阅下面的链接。
http://developer.android.com/reference/android/webkit/WebSettings.html
这个聚会太晚了!但我想如果我向你展示我的方法,那将是一个好主意。特别是我没有使用 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"
}