當前位置:首頁 » 安卓系統 » Android2Web

Android2Web

發布時間: 2022-05-05 04:06:48

『壹』 Android的WebView有哪些坑

下面說說我比較困惑的幾個地方。

1.WebViewClient.onPageFinished()。你永遠無法確定當WebView調用這個方法的時候,網頁內容是否真的載入完畢了。當前正在載入的網頁產生跳轉的時候這個方法可能會被多次調用,StackOverflow上有比較具體的解釋(How to listen for a Webview finishing loading a URL in Android?), 但其中列舉的解決方法並不完美。所以當你的WebView需要載入各種各樣的網頁並且需要在頁面載入完成時採取一些操作的話,可能WebChromeClient.onProgressChanged()比WebViewClient.onPageFinished()都要靠譜一些。
2.WebView後台耗電問題。當你的程序調用了WebView載入網頁,WebView會自己開啟一些線程(?),如果你沒有正確地將WebView銷毀的話,這些殘余的線程(?)會一直在後台運行,由此導致你的應用程序耗電量居高不下。對此我採用的處理方式比較偷懶,簡單又粗暴(不建議),即在Activity.onDestroy()中直接調用System.exit(0),使得應用程序完全被移出虛擬機,這樣就不會有任何問題了。
3.切換WebView閃屏問題。如果你需要在同一個ViewGroup中來回切換不同的WebView(包含了不同的網頁內容)的話,你就會發現閃屏是不可避免的。這應該是Android硬體加速的Bug,如果關閉硬體加速這種情況會好很多,但無法獲得很好的瀏覽體驗,你會感覺網頁滑動的時候一卡一卡的,不跟手。
4.數據積累問題。開啟緩存什麼的有利於網頁的瀏覽體驗,但你會發現即使是清除了必要的內容,比如Cache、Cookie、Form Data、History、Password等等東西,你的應用程序所佔用的存儲空間還是會越來越大,到最後只好手動到系統設置的應用信息界面里清除數據了 :(
5.滾動條問題。Android System WebView的橫向滾動條真是好粗的有木有...
6.注意4.4系統前後的區別,在這個版本裡面谷歌把webview的內核換成谷歌瀏覽器的!
7.在webview中進行javaScript交互時也要注意,出於對安全性的考慮,在設置與JavaScript有關的選項時,需要在所在方法的前面加上@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" }),不然4.2以上調用js會出現問題;
8.在調用loaddata方法時注意與loaddatawithurl的區別,前者要注意編碼問題而且容易出於亂碼問題,後者默認utf8編碼!
另外針對Android System WebView的相關開發,推薦看看Google官方的示例教程 GoogleChrome/chromium-webview-samples · GitHub

『貳』 android中webview載入網頁,為什麼有的網站會被載入兩次

這是正常載入的代碼。你可以核對參考一下。
package com.example.webview;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity
{

private WebView webview;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webview.getSettings();
//設置WebView屬性,能夠執行Javascript腳本
webSettings.setJavaScriptEnabled(true);
//設置可以訪問文件
webSettings.setAllowFileAccess(true);
//設置支持縮放
webSettings.setBuiltInZoomControls(true);
//載入需要顯示的網頁
webview.loadUrl(".com");
//設置Web視圖
webview.setWebViewClient(new webViewClient ());

}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
//設置回退
//覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack(); //goBack()表示返回WebView的上一頁面
return true;
}
finish();//結束退出程序
return false;
}

//Web視圖
private class webViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}

}

『叄』 Android手機搭建HTTP/WEB伺服器環境教程

這一陣感覺玩手機玩膩了,VPS也玩膩了,瞬間感覺啥都玩膩了。前幾天閑著無聊,看到了手機上的超級終端,心想:安卓底層不也是Linux么?於是就用超級終端wget了一個文件,成功了!吼吼,於是下一個想法就是能不能在手機上搭建一個WEB環境???
想到就開始各種搜,發現安卓使用的Linux並不屬於任何發行版本,看來使用傳統的建站方式不行了。繼續搜索,發現谷歌商店裡有一個集成lighttpd+php+mysql+phpmyadmin環境的APK,哈哈,這下好了。當然,如果只裝上這個APK只能在本地測試,無法使用公網訪問,所以,經過我各種搜,終於有了這一篇文章,毫不客氣的說,這絕對是全網首發,至少不用讓你再像我一樣各種搜了。
現在的手機硬體已經很強大了,¥1999就能買到4核1.5G,2G內存的手機,這幾乎能滿足像我這樣的小站的需求了。硬體有了,集成環境的APK也有了,就剩下公網訪問了。
第一:需要一部安卓手機,至少600MHZ的CPU,256內存,手機需要ROOT,沒有ROOT的話,不能使用80埠。
第二:下載我提供的集成環境的APK文件(這里)解壓密碼:www.facebooksx.com,KSWEB在谷歌商店裡是收費的,免費試用5天,我提供的這個文件為網友破解版,免費試用55年,夠你折騰了。
第三:需要一個支持路由功能的路由器,以及一個花生殼賬號。
1.首先在手機上安裝APK,(如果手機里有什麼防火牆之類的,請關閉,否則不能使用WIFI地址訪問),然後點開KSWEB,首次開啟,會解壓縮文件,然後會提示重啟,重啟後,就能夠看到mysql啟動和相應信息了。
2.點options進入設置,然後勾選上root許可權,這樣就可以更改埠為80了。然後回到主界面,點phpmyadmin然後就會自動下載了。下載成功後,可以在手機瀏覽器里輸入127.0.0.1,就可以看到相關信息。雖然版本有些老,但是相當簡便啊親……
如果你只想在手機上測試,那麼到這里就結束了。如果想讓公網訪問手機,
那麼就需要使用DDNS(動態域名解析)來支持。
3.使用oray護照,登錄花生殼,系統會自動分配給你一個免費域名,用這個域名來訪問手機。登錄你的路由器,點擊“轉發規則”,選擇“虛擬伺服器”,埠填寫80,IP地址填寫你手機WIFI的IP地址,保存,如圖所示。
4.保存後,點擊“動態DNS設置”,賬號密碼就是你oray的通行證,點登錄,如果成功了,就會自動識別你的免費域名。如圖所示,然後保存就行了。
這樣的話,直接輸入域名就可以訪問到手機了,只要你的路由器不關閉,就可以一直使用了。下面是我的演示:
至此,你的手機就可以當成一個獨立的VPS來使用了,建議使用閑置的手機來玩,它有以下幾個好處:裝13,夠折騰,省電省資源,廢物利用,數據更安全,便攜,國內速度一流……還有,查域名的時候貌似是獨立IP,這樣網路會不會喜歡呢?

『肆』 android 怎麼使用2個webview

兩個webview,跟一個是一樣的用法,就是使用兩個webview控制項就行,我在平板項目中載入了四個webview的控制項。

『伍』 Android 使用KSOAP2調用WebService

android 利用ksoap2方式連接webservice(2010-04-16 16:36:25)轉載標簽:androidksoap2webserviceit 分類:Android
利用J2SE的ksoap2標准,我也來做一個山寨版本的android連接webservice。因為soap封裝的關系,android application在接收到數據後不能夠正確的按照J2SE的標准來獲取。

在運用之前,我們先要引導兩個jar進入工程的buildpath

這兩個jar包都可以在網上查到下載,引導完後再做一項准備工作。弄清楚已發布的webservice的地址,以及封裝的方式。比如:

webservice介面: http://192.168.0.2:8080/axis2/services/Manager?wsdl (順便說明一下,在android當中,不能寫localhost,必須寫清楚PC機當前的網路IP)
webservice封裝: http://ws.apache.org/axis2

都了解了過後,說明已經做好准備了。
下面就介紹一下android如何獲取webservice封裝數據。。

引入ksoap2中以封裝好的類
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

在類中定義webservice的介面地址以及解析方式並且定義要調用的webservice中的函數
private static final String URL = " http://192.168.0.2:8080/axis2/services/Manager?wsdl";
private static final String NAMESPACE = " http://ws.apache.org/axis2";
private static final String METHOD_NAME = "GetMyFriends";

這個信息我們可以在webservice中查到
<xs:element name="GetMyFriends">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="userId" type="xs:int"/>
<xs:element minOccurs="0" name="password" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

接下來開始做對webservice請求數據的工作,請求webservice函數以及封裝要用的兩個參數(userId和password)
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("userId", "123456");
request.addProperty("password", "test");
之後我們給定義發送數據的信封的封裝格式
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11 );
發出請求
envelope.setOutputSoapObject(request);
AndroidHttpTransport aht = new AndroidHttpTransport(URL);
aht.call(null, envelope);

接著就可以定義一個SoapObject類型的實例去獲取我們返回來的數據
SoapObject so = (SoapObject) envelope.bodyIn;
這里如果是返回來的數據只有一行並且只有一個值,比如驗證函數,返回boolean類型的話,操作比較簡單,String getReturn= so.getProperty("return"); 這個getReturn就是你要獲取的值。
但是如果返回來是多行的值的話,這個方法就不行了,我們必須對返回來的信息做一些解析。我曾試過用J2SE的標准方式來獲取,但是會報錯,最主要的可能是他的方式在android當中不能使用。所以在這里我用了正則表達式這種方式來進行數據的解析,我們先來看一下他返回的數據的結構是什麼情況。
GetMyFriendsResponse{return=FriendsMessage{ <br>permitList=anyType{nickName=我愛羅; singnature=null; userId=2; }; permitList=anyType{nickName=jack; singnature=null; userId=1004; }; permitList=anyType{nickName=admin; singnature=leo_admin; userId=1001; };};}
簡單看他很想Json結構,但是確不是。。。
就目前的解決方式,我只是通過規律來進行了正則表達式的解析:如解析上面的內容。

//首先取得permitList(好友)的個數
String testPattern = "permitList";
int resultlength = result.length();
cresult = cresult.replace(testPattern, "");
int lastlength = (resultlength - cresult.length()) / testPattern.length();

//取得每個permitList中的值。
String LoginReturn="", pattern="nickName=.*?;\\s*singnature=.*?;\\s*userId=.*?;";
//動態生成String 數組,存儲每個好友的信息
String[] GetFinalReturn = new String[lastlength];
for (int i=0;i<lastlength;i++){
LoginReturn = result.replaceFirst("^.*("+pattern+").*$", "$1");
GetFinalReturn[i] = LoginReturn;
result = result.replace(LoginReturn,"");
}
這個數組裡面存儲的格式就是nickName=admin; singnature=leo_admin; userId=1001;
這樣以來,我們可以根據"="和";"兩個符號之間做split操作就可以得到數據。

好了,到此連接webservice和解析返回來的數據的工作就做完了,雖然這個方式看起來很復雜,但是目前來說,用ksoap2方式來連接webservice暫時還沒有找到更有效的解決方式。。

『陸』 Android WebView 在開發過程中有哪些坑

自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中的程序。

『柒』 Android系統 WebView是什麼有什麼用

現在越來越多的APP都內置了Web網頁去載入視圖,也就是我們常說的Hybrid APP混合應用,市場上很多平台都是這樣做的,比如我們經常使用的淘寶、京東等電商平台。這些是如何實現的呢?在我們Android中有一個WebView組件,它就可以實現此類功能。它是Android中的原生UI控制項,主要用於在APP應用中方便地訪問遠程網頁或本地HTML資源,同時WebView也在Android中充當Java代碼和JS代碼之間交互的橋梁,實際上也可以將WebView看做一個功能最小化的瀏覽器。下面我們一起來看看WebView的一些常用的使用方法。

WebView是Android系統提供的一個能顯示網頁的系統控制項,它是一個特殊的View,同時也是一個ViewGroup,可以有很多其他子View。在Android 4.4以下(不包含4.4)系統WebView底層實現是採用WebKit內核,而在Android 4.4及其以上Google採用了Chromium內核作為系統WebView的底層內核支持。在這一變化中Android提供的WebView相關API並沒有發生較大變化,在4.4上也兼容低版本的API並且引進了少部分API。這里簡單介紹下基於Chromium的WebView和基於WebKit的WebView之間的差異,基於Chromium的Webview提供了更廣的HTML5、CSS3、JavaScript支持,在Android系統版本5.0上基於Chromium 37,WebView提供了絕大多數的HTML5特性支持,除此之外Chromium也支持遠程調試(Chrome DevTools)。WebKit JavaScript引起採用WebCore JavaScript在Android 4.4上換成了V8能直接提升JavaScript性能。

二、作用
1、顯示和渲染Web頁面
2、使用html文件(網路上或本地assets中)作為布局
3、可與JavaScript交互調用
註: WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對Url請求、頁面載入、渲染、頁面交互進行強大的處理。

『捌』 android中webview 怎麼實現網頁載入時顯示載入進度

android中只需要給webView注冊一個事件即可實現載入進度。
以下是具體實現代碼:
1.從webView中獲取設置
WebSettings sws = webView.getSettings();
sws.setSupportZoom(true);
sws.setBuiltInZoomControls(true);
webView.setInitialScale(25);
webView.getSettings().setUseWideViewPort(true);

2.注冊setWebChromeClient事件
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
// Activity和Webview根據載入程度決定進度條的進度大小
// 當載入到100%的時候 進度條自動消失
//WebViewProgressActivity.this.setTitle("Loading...");
//WebViewProgressActivity.this.setProgress(progress * 100);
if (progress == 100) {
progressBar.setVisibility(View.GONE);
//WebViewProgressActivity.this.setTitle("完成");
}
}
});

3.注意在onProgressChanged中處理進度,progress就是進度值。

『玖』 Android怎麼連接Web伺服器

轉載 這種功能實際上就是數據同步,同時要考慮手機本身、電量、網路流量等等限制因素,所以通常在移動端上有一下兩個解決方案: 1.一種是定時去server查詢數據,通常是使用HTTP協議來訪問web伺服器,稱Polling(輪詢); 2.還有一種是移動端和服...

熱點內容
編譯好的內核如何升級另一台主機 發布:2025-05-15 02:00:06 瀏覽:757
彈反腳本 發布:2025-05-15 01:58:24 瀏覽:585
安卓按鍵大師怎麼用 發布:2025-05-15 01:54:12 瀏覽:686
手機ea伺服器連不上怎麼辦 發布:2025-05-15 01:35:03 瀏覽:450
資料庫數據插入語句 發布:2025-05-15 01:30:01 瀏覽:871
js是無需編譯直接運行嗎 發布:2025-05-15 01:28:30 瀏覽:476
android文件夾重命名 發布:2025-05-15 01:13:50 瀏覽:481
cns腳本 發布:2025-05-15 01:13:38 瀏覽:722
數據結構與演算法筆試題 發布:2025-05-15 01:04:20 瀏覽:417
搜狗輸入法如何直接編輯配置文件 發布:2025-05-15 00:51:47 瀏覽:668