當前位置:首頁 » 安卓系統 » 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 11:02:40 瀏覽:382
怎麼把蘋果的號轉到安卓手機上 發布:2025-04-05 10:39:05 瀏覽:533
存儲核心架構瓶頸已被攻破 發布:2025-04-05 10:38:27 瀏覽:308
空間新演算法 發布:2025-04-05 10:33:21 瀏覽:708
蜀門和遠征哪個配置低 發布:2025-04-05 10:23:50 瀏覽:287
linux下jdk的安裝 發布:2025-04-05 10:12:20 瀏覽:70
單機江湖腳本 發布:2025-04-05 10:08:32 瀏覽:767
愛奇藝離線緩存怎麼傳藍牙 發布:2025-04-05 10:00:48 瀏覽:143
阿里雲伺服器內存超頻 發布:2025-04-05 10:00:48 瀏覽:578
如何登錄pubg國際服安卓手機 發布:2025-04-05 09:40:07 瀏覽:414