Android获取设备useragent,Android获取浏览器User Agent

本文详细解读了如何通过WebView在Android应用中获取UserAgent字符串,并剖析了getUserAgentString方法内部的构造逻辑,包括版本信息、设备型号、操作系统等组成部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取浏览器User Agent的代码:

WebView webview;

webview = new WebView(this);

webview.layout(0, 0, 0, 0);

WebSettings settings = webview.getSettings();

String ua = settings.getUserAgentString();

Log.e("HJJ", "User Agent:" + ua);我们来看看getUserAgentString源代码:

public synchronized String getUserAgentString() {

if (DESKTOP_USERAGENT.equals(mUserAgent) ||

IPHONE_USERAGENT.equals(mUserAgent) ||

!mUseDefaultUserAgent) {

return mUserAgent;

}

boolean doPostSync = false;

synchronized(sLockForLocaleSettings) {

Locale currentLocale = Locale.getDefault();

if (!sLocale.equals(currentLocale)) {

sLocale = currentLocale;

mUserAgent = getCurrentUserAgent();

mAcceptLanguage = getCurrentAcceptLanguage();

doPostSync = true;

}

}

if (doPostSync) {

postSync();

}

return mUserAgent;

}

private synchronized String getCurrentUserAgent() {

Locale locale;

synchronized(sLockForLocaleSettings) {

locale = sLocale;

}

StringBuffer buffer = new StringBuffer();

// Add version

final String version = Build.VERSION.RELEASE;

if (version.length() > 0) {

buffer.append(version);

} else {

// default to "1.0"

buffer.append("1.0");

}

buffer.append("; ");

final String language = locale.getLanguage();

if (language != null) {

buffer.append(language.toLowerCase());

final String country = locale.getCountry();

if (country != null) {

buffer.append("-");

buffer.append(country.toLowerCase());

}

} else {

// default to "en"

buffer.append("en");

}

// add the model for the release build

if ("REL".equals(Build.VERSION.CODENAME)) {

final String model = Build.MODEL;

if (model.length() > 0) {

buffer.append("; ");

buffer.append(model);

}

}

final String id = Build.ID;

if (id.length() > 0) {

buffer.append(" Build/");

buffer.append(id);

}

final String base = mContext.getResources().getText(

com.android.internal.R.string.web_user_agent).toString();

return String.format(base, buffer);

}

如我获取到自己手机的UA如下:

Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; U8817 Build/MocorDroid4.0.3) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

显然它是这样组成的:

首先,web_user_agent的代码为:

Mozilla/5.0 (Linux; U; Android %s) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

其中%s为构造的buffer。

对应如下:

4.0.3   Build.VERSION.RELEASE

U8817 如果Build.VERSION.CODENAME.equal("REL"),哪么值为Build.MODEL

MocorDroid4.0.3  值为Build.ID

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值