当前位置:首页 » 安卓系统 » android的useragent

android的useragent

发布时间: 2022-12-24 02:28:40

⑴ 如何修改Android自带浏览器的User Agent

楼上说的都不对,想让网站在PC、iPhone、iPad、Android设备上打开同一域名然后显示不同,原理上是通过网页程序首先识别设备,然后再根据不同设备,跳转到不同的二级域名或链接。其中,跳转二级域名这种方式是最常见的。 我以Php和javascript代码,简单给出检测设备的代码,具体实现的代码恕不奉上: Php检测iPhone、iPad、Android设备: $iPhone = strstr($_SERVER['HTTP_USER_AGENT'],'iPhone'); $iPod = strstr($_SERVER['HTTP_USER_AGENT'],'iPod'); $Android = stripos($_SERVER['HTTP_USER_AGENT'],'Android') !== false; Javascript检测iPhone、iPad、Android设备: var iPhone = (navigator.userAgent.match(/iPhone/i)); var iPod = navigator.userAgent.match(/iPod/i); var Android = navigator.userAgent.match(/Android/i); 有了这些设备检测代码,就可以实现判断和域名跳转了。 另外,现在有些在不同客户端查看网站的工具,我不好发链接,自己输入关键字:Screenfly 可以用来测试不同不同显示器或者移动设备下网站显示状况的工具,并且支持最流行的平板电脑或者移动设备。

⑵ 如何获得Android的USER Agent-Android开发问答

OPHONE的UA存放位置:
1)OPHONE 1.0和1.5 存放于/opl/etc/properties.xml
1)OPHONE 2.0 存放于/opl/etc/proct_properties.xml

大家可以通过下面的步骤自己查看:
1),连上手机,或者模拟器。
2),输入 adb shell
3),输入 cd opl
4),输入 cd etc
5),输入 cat properties.xml (或者cat proct_properties.xml 【OPHONE2.0】)

结果如下图:
ophone.png (6 KB)
ophone ua

2010-08-24 14:09

以上就是properties.xml的内容,接下来就是获得这个UA,加到自己的联网请求里去。
我自己写了一个,适用于目前3个版本的OPHONE。

AndroidPlatform.java

package com.***.****;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;

public class AndroidPlatform {

public static final String KEYSTRING_USER_AGENT = "user_agent_key";

public static String getUAFromProperties()
{
try {
FileInputStream is = getPropertyStream();
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
byte buf[] = new byte[1024];
for(int k = 0; -1 != (k = is.read(buf));)
bytearrayoutputstream.write(buf, 0, k);

String fileString = new String(bytearrayoutputstream.toByteArray(), "UTF-8");

return getProperties(KEYSTRING_USER_AGENT, fileString);

//System.out.println("IS FILE Android Platform " + bytearrayoutputstream.size() + " "+());

} catch (Exception e) {
// TODO: handle exception

System.out.println("IS FILE erororo");
e.printStackTrace();
}
return null;
}

public static FileInputStream getPropertyStream()
{
try {

File property = new java.io.File("/opl/etc/properties.xml");
if(property.exists())
{
return new FileInputStream(new java.io.File("/opl/etc/properties.xml"));
}
else
{
property = new java.io.File("/opl/etc/proct_properties.xml");
if(property.exists())
{
return new FileInputStream(new java.io.File("/opl/etc/proct_properties.xml"));
}
else
{
return null;
}
}

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}

public static String getProperties(String key, String content)
{
String STARTKEY = "<"+key+">";
String ENDKEY = "</"+key+">";
content = content.replace("\r", "");
content = content.replace("\n", "");

int startIndex = content.indexOf(STARTKEY) + STARTKEY.length();
int endIndex = content.indexOf(ENDKEY);
if(startIndex > -1 && endIndex > -1)
{
return content.substring(startIndex, endIndex);
}
else
return null;
}

}

联网请求时,加入UA即可,这样就做到了自动适配了。具体如下:

private int CountMoneyCMWAPNEWWAY(String urlstr)
{

String strHead = "";
try{
if(!GameLet._self.isNetworkCMWAPAvailable())
{
GameLet._self.ActiveNetWorkByMode("wap");
Thread.sleep(5000);
}

int splashIndex = urlstr.indexOf("/", 7);

String hosturl = urlstr.substring(7, splashIndex);
String hostfile = urlstr.substring(splashIndex);

HttpHost proxy = new HttpHost( "10.0.0.172", 80, "http");
HttpHost target = new HttpHost(hosturl, 80, "http");

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);
HttpConnectionParams.setSocketBufferSize(httpParams, 8192);
HttpClientParams.setRedirecting(httpParams, true);

String userAgent = AndroidPlatform.getUAFromProperties();

HttpProtocolParams.setUserAgent(httpParams, userAgent);
DefaultHttpClient httpclient = new DefaultHttpClient(httpParams);

httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

HttpGet req = new HttpGet(hostfile);

HttpResponse rsp = httpclient.execute(target, req);

HttpEntity entity = rsp.getEntity();

InputStream inputstream = entity.getContent();
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
byte abyte1[] = new byte[1024];
for(int k = 0; -1 != (k = inputstream.read(abyte1));)
bytearrayoutputstream.write(abyte1, 0, k);

strHead = new String(bytearrayoutputstream.toByteArray(), "UTF-8");

httpclient.getConnectionManager().shutdown();

}
catch (Exception e) {
return 2;
}

if(strHead.indexOf("status=1301") > -1 || strHead.indexOf("status=1300") > -1)
{
return 1;
}
else
{
return 0;
}

}

⑶ 如何在Android应用里对HTTP请求头部添加适当的User-Agent字段

webView可以setUserAgentString
Java code
?
1
2
3
mwebView = new WebView(mContext);
WebSettings set = mwebView.getSettings();
set.setUserAgentString(SmartConfig.getWebUserAgent(mContext));

⑷ 安卓的各个版本以及对应的安卓webview的版本是多少

在浏览器中我们只需要输入 javascript:alert(navigator.userAgent),即可获得android 内置浏览器内核版本。一般不同型号的手机版本也不一样,在不断的更新迭代

⑸ 如何修改Android自带浏览器的User Agent

最近在研究Android自带的Chrome Lite浏览器,想修改下它的UserAgent,跟踪了下Android2.2的源代码,发现主要要修改如下几个地方:
1.platform/packages/apps/Browser/src/com/android/browser/BrowserSettings.java
2.platform/packages/apps/Browser/res/values/strings.xml
在strings.xml中找到这一段:

view plain to clipboardprint?
<!-- Do not tranlsate. Development option -->
<string-array name="pref_development_ua_choices" translatable="false">
<item>Android</item>
<item>Desktop</item>
<item>iPhone</item>
</string-array>
<!-- Do not tranlsate. Development option -->
<string-array name="pref_development_ua_values" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>

这一段中pref_development_ua_choices对应的是Browser的debug模式下选择UserAgent时选项的名字,pref_development_ua_values对应的是不同的UserAgent,一会我会讲到这些数字分别对应的是什么UserAgent。
在BrowserSettings.java中找到这两段:

view plain to clipboardprint?
private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +
"U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, " +
"like Gecko) Version/4.0 Safari/530.17";
private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
"CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 " +
"(KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";


view plain to clipboardprint?
public void update(Observable o, Object arg) {
BrowserSettings b = (BrowserSettings)o;
WebSettings s = mSettings;
s.setLayoutAlgorithm(b.layoutAlgorithm);
if (b.userAgent == 0) {
// use the default ua string
s.setUserAgentString(null);
} else if (b.userAgent == 1) {
s.setUserAgentString(DESKTOP_USERAGENT);
} else if (b.userAgent == 2) {
s.setUserAgentString(IPHONE_USERAGENT);
}

由此我们可以看出第一段Java代码是不同的UserAgent字符串,从第二段代码中我们可以看出strings.xml中那个整数的数组和不同UserAgent的对应关系,0对应默认的UserAgent,即Android Chrome Lite自己的UserAgent,1对应的是Mac OS的UserAgent,2对应的是IPhone OS的UserAgent。
有了上述信息,添加一个自己的UserAgent就不是什么难事了,首先在strings.xml中添加一个UserAgent选项的名字,然后添加一个序号,然后在BrowserSettings.java中添加一个自己的UserAgent字符串,然后在最后一个if后面写一个

view plain to clipboardprint?
else if (b.userAgent == 3) {
s.setUserAgentString(YOUR_OWN_USERAGENT);
}

然后就大功告成了!

⑹ 接触Android网络编程需要什么知识基础

Android平台的网络应用绝大部分都是基于Java的编程接口的,也就是说我们开发类似的运用的时候可以有多种选择,比J2me确实好多了。
2.1. 标准Java接口
java.net.*下面提供了访问 HTTP 服务的基本功能。使用这部分接口的基本操作主要包括:
·创建 URL 以及 URLConnection / HttpURLConnection 对象
· 设置连接参数
·连接到服务器
· 向服务器写数据
·从服务器读取数据
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.net.HttpURLConnection;

try {
// 创建一个 URL 对象
URL url = new URL(your_url);

// 创建一个 URL 连接,如果有代理的话可以指定一个代理。
URLConnection connection = url.openConnection(Proxy_yours);
// 对于 HTTP 连接可以直接转换成 HttpURLConnection,
// 这样就可以使用一些 HTTP 连接特定的方法,如 setRequestMethod() 等
//HttpURLConnection connection =
(HttpURLConnection)url.openConnection(Proxy_yours);

// 在开始和服务器连接之前,可能需要设置一些网络参数
connection.setConnectTimeout(10000);
connection.addRequestProperty("User-Agent",
"J2me/MIDP2.0");

// 连接到服务器
connection.connect();

// 往服务器写数据,数据会暂时被放到内存缓存区中
// 如果仅是一个简单的 HTTP GET,这一部分则可以省略
OutputStream outStream = connection.getOutputStream();
ObjectOutputStream objOutput = new ObjectOutputStream(outStream);
objOutput.writeObject(new String("this is a string..."));
objOutput.flush();

// 向服务器发送数据并获取应答
InputStream in = connection.getInputStream();

// 处理数据
...

} catch (Exception e) {
// 网络读写操作往往会产生一些异常,所以在具体编写网络应用时
// 最好捕捉每一个具体以采取相应措施
}

2.2. Apache接口
Apache HttpClient 是一个开源项目,弥补了 java.net.* 灵活性不足的缺点,为客户端的HTTP编程提供高效、最新、功能丰富的工具包支持。Android 平台引入了 Apache HttpClient 的同时还提供了对它的一些封装和扩展,例如设置缺省的HTTP超时和缓存大小等。早期的 Android 曾同时包括 Commons HttpClient (org.apache.commons.httpclient.*) 和 HttpComponents (org.apache.http.client.* ),不过当前版本 (1.5) 中开发者只能使用后者,也就是说类似以下的一些类:
使用这部分接口的基本操作与 java.net.* 基本类似,主要包括:
· 创建 HttpClient 以及 GetMethod / PostMethod, HttpRequest 等对象
·设置连接参数
·执行 HTTP 操作
· 处理服务器返回结果
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.params. HttpConnectionParams;
import org.apache.http.client.params. HttpClientParams;

try {
// 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)
HttpParams params = new BasicHttpParams();

// 设置连接超时和 Socket 超时,以及 Socket 缓存大小
HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);
HttpConnectionParams.setSoTimeout(params, 20 * 1000);
HttpConnectionParams.setSocketBufferSize(params, 8192);

// 设置重定向,缺省为 true
HttpClientParams.setRedirecting(params, true);

// 设置 user agent
HttpProtocolParams.setUserAgent(params, userAgent);

// 创建一个 HttpClient 实例
// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient
// 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient
HttpClient httpClient = new DefaultHttpClient(params);

// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向
HttpGet httpGet = new HttpGet ("http://www.test_test.com/");

HttpResponse response = client.execute(httpGet);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// 错误处理,例如可以在该请求正常结束前将其中断
httpGet.abort();
}

// 读取更多信息
Header[] headers = response.getHeaders();
HttpEntity entity = response.getEntity();
Header header = response.getFirstHeader("Content-Type");
} catch (Exception ee) {
//
} finally {
// 释放连接
client.getConnectionManager().shutdown();
}
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.params. HttpConnectionParams;
import org.apache.http.client.params. HttpClientParams;

try {
// 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)
HttpParams params = new BasicHttpParams();

// 设置连接超时和 Socket 超时,以及 Socket 缓存大小
HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);
HttpConnectionParams.setSoTimeout(params, 20 * 1000);
HttpConnectionParams.setSocketBufferSize(params, 8192);

// 设置重定向,缺省为 true
HttpClientParams.setRedirecting(params, true);

// 设置 user agent
HttpProtocolParams.setUserAgent(params, userAgent);

// 创建一个 HttpClient 实例
// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient
// 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient
HttpClient httpClient = new DefaultHttpClient(params);

// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向
HttpGet httpGet = new HttpGet ("http://www.test_test.com/");

HttpResponse response = client.execute(httpGet);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// 错误处理,例如可以在该请求正常结束前将其中断
httpGet.abort();
}

// 读取更多信息
Header[] headers = response.getHeaders();
HttpEntity entity = response.getEntity();
Header header = response.getFirstHeader("Content-Type");
} catch (Exception ee) {
//
} finally {
// 释放连接
client.getConnectionManager().shutdown();
}
以下例子以 HttpGet 方式通过代理访问 HTTPS 网站:
try {
HttpClient httpClient = new HttpClient();

// 设置认证的数据
httpClient.getCredentialsProvider().setCredentials(
new AuthScope("your_auth_host", 80, "your_realm"),
new UsernamePasswordCredentials("username", "password"));

// 设置服务器地址,端口,访问协议
HttpHost targetHost = new HttpHost("www.test_test.com", 443, "https");

// 设置代理
HttpHost proxy = new HttpHost("192.168.1.1", 80);
httpClient.getParams().setParameter
(ConnRoutePNames.DEFAULT_PROXY, proxy);

// 创建一个 HttpGet 实例
HttpGet httpGet = new HttpGet("/a/b/c");

// 连接服务器并获取应答数据
HttpResponse response = httpClient.execute(targetHost, httpGet);

// 读取应答数据
int statusCode = response.getStatusLine().getStatusCode();
Header[] headers = response.getHeaders();
HttpEntity entity = response.getEntity();
} catch (Exception ee) {
//
2.3. Android接口
android.net.* 实际上是通过对 Apache 的 HttpClient 的封装来实现的一个 HTTP 编程接口,同时还提供了 HTTP 请求队列管理, 以及 HTTP 连接池管理,以提高并发请求情况下(如转载网页时)的处理效率,除此之外还有网络状态监视等接口。
以下是一个通过 AndroidHttpClient 访问服务器的最简例子:

import import android.net.http.AndroidHttpClient;

try {
AndroidHttpClient client = AndroidHttpClient.newInstance(“your_user_agent”);

// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向
HttpGet httpGet = new HttpGet ("http://www.test_test.com/");

HttpResponse response = client.execute(httpGet);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// 错误处理
}

// 关闭连接
client.close();
} catch (Exception ee) {
//
}

⑺ Android PopupWindow 在开发过程中有哪些坑

自Android 4.4起,引入了webView,使用需要注意的事项:


1.多线程


如果你在子线程中调用WebView的相关方法,而不在UI线程,则可能会出现无法预料的错误。


所以,当你的程序中需要用到多线程时候,也请使用 runOnUiThread()方法来保证你关于WebView的操作是在UI线程中进行的:

runOnUiThread(newRunnable(){
@Override
publicvoidrun(){
//CodeforWebViewgoeshere
}
});


2.线程阻塞


永远不要阻塞UI线程,这是开发Android程序的一个真理。虽然是真理,我们却往往不自觉的

犯一些错误违背它,一个开发中常犯的错误就是:在UI线程中去等待JavaScript 的回调。


例如:

//
webView.loadUrl("javascript:fn()");while(result==null){
Thread.sleep(100);}


千万不要这样做,Android 4.4中,提供了新的Api来做这件事情。 evaluateJavascript() 就是

专门来异步执行JavaScript代码的。


3.evaluateJavascript() 方法


专门用于异步调用JavaScript方法,并且能够得到一个回调结果。


示例:

mWebView.evaluateJavascript(script,newValueCallback<String>(){
@Override
publicvoidonReceiveValue(Stringvalue){
//TODO
}
});


4.处理 WebView 中 url 跳转


新版WebView对于自定义scheme的url跳转,新增了更为严格的限制条件。 当你实现了

shouldOverrideUrlLoading() 或 shouldInterceptRequest() 回调,WebView 也只会在跳转

url是合法Url时才会跳转。


例如,如果你使用这样一个url :


<ahref="showProfile"]]>Show Profile</a>



shouldOverrideUrlLoading() 将不会被调用。


正确的使用方式是:


<ahref="example-app:showProfile"]]>Show Profile</a>

对应的检测Url跳转的方式:

//TheURLschemeshouldbenon-hierarchical(notrailingslashes)
privatestaticfinalStringAPP_SCHEME="example-app:";

@(WebViewview,String
url){
if(url.startsWith(APP_SCHEME)){
urlData=URLDecoder.decode(url.substring(APP_SCHEME.length()),"UTF-8");
respondToData(urlData);
returntrue;
}
returnfalse;}


当然,也可以这样使用:
webView.loadDataWithBaseURL("example-app://example.co.uk/", HTML_DATA,
null,"UTF-8",null);



5.UserAgent 变化
如果你的App对应的服务端程序,会根据客户端传来的UserAgent来做不同的事情,那么你需

要注意的是,新版本的WebView中,UserAgent有了些微妙的改变:


Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16H)


AppleWebKit/537.36(KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0


Mobile Safari/537.36

使用 getDefaultUserAgent()方法可以获取默认的UserAgent,也可以通过:


mWebView.getSettings().setUserAgentString(ua);


mWebView.getSettings().getUserAgentString();

来设置和获取自定义的UserAgent。


6.使用addJavascriptInterface()的注意事项


从Android4.2开始。 只有添加 @JavascriptInterface 声明的Java方法才可以被JavaScript调用,例如:

classJsObject{
@JavascriptInterface
publicStringtoString(){return"injectedObject";}
}
webView.addJavascriptInterface(newJsObject(),"injectedObject");
webView.loadData("","text/html",null);
webView.loadUrl("javascript:alert(injectedObject.toString())");


7.Remote Debugging


新版的WebView还提供了一个很厉害的功能:使用Chrome来调试你运行在WebView中的程序。

热点内容
文件存储和数据库存储 发布:2025-04-05 18:20:34 浏览:329
安卓手机a16数据在哪个文件夹 发布:2025-04-05 18:01:44 浏览:488
netty实现ftp 发布:2025-04-05 17:35:54 浏览:93
打印菱形java 发布:2025-04-05 17:35:53 浏览:913
等响算法 发布:2025-04-05 17:24:17 浏览:999
算法精编 发布:2025-04-05 17:17:03 浏览:356
虐杀原形2和热血无赖哪个配置高 发布:2025-04-05 17:09:23 浏览:611
计算机常用算法 发布:2025-04-05 17:07:54 浏览:65
天选2密码在哪里设置 发布:2025-04-05 16:36:28 浏览:87
目前什么安卓手机续航能力最强 发布:2025-04-05 16:31:22 浏览:598