編輯:關於Android編程
Android WebView 做為承載網頁的載體控件,他在網頁顯示的過程中會產生一些事件,並回調給我們的應用程序,以便我們在網頁加載過程中做應用程序想處理的事情。比如說客戶端需要顯示網頁加載的進度、網頁加載發生錯誤等等事件。 WebView提供兩個事件回調類給應用層,分別為WebViewClient,WebChromeClient開發者可以繼承這兩個類,接手相應事件處理。WebViewClient 主要提供網頁加載各個階段的通知,比如網頁開始加載onPageStarted,網頁結束加載onPageFinished等;WebChromeClient主要提供網頁加載過程中提供的數據內容,比如返回網頁的title,favicon等。
class MyAndroidWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // TODO } @Override public void onPageFinished(WebView view, String url) { // TODO }
} webview.setWebViewClient(new MyAndroidWebViewClient ());
public boolean shouldOverrideUrlLoading(WebView view, String url)當加載的網頁需要重定向的時候就會回調這個函數告知我們應用程序是否需要接管控制網頁加載,如果應用程序接管,並且return true意味著主程序接管網頁加載,如果返回false讓webview自己處理。
public void onPageStarted(WebView view, String url, Bitmap favicon)當內核開始加載訪問的url時,會通知應用程序,對每個main frame這個函數只會被調用一次,頁面包含iframe 或者framesets 不會另外調用一次onPageStarted,當網頁內內嵌的frame 發生改變時也不會調用onPageStarted。
public void onPageFinished(WebView view, String url)
public void onLoadResource(WebView view, String url)通知應用程序WebView即將加載url 制定的資源
public WebResourceResponse shouldInterceptRequest(WebView view, String url)通知應用程序內核即將加載url制定的資源,應用程序可以返回本地的資源提供給內核,若本地處理返回數據,內核不從網絡上獲取數據。
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)當浏覽器訪問制定的網址發生錯誤時會通知我們應用程序,比如網絡錯誤。
public void onFormResubmission(WebView view, Message dontResend, Message resend)如果浏覽器需要重新發送POST請求,可以通過這個時機來處理。默認是不重新發送數據。參數說明:@param view 接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。@param dontResent 當浏覽器不需要重新發送數據時,可以使用這個參數。@param resent 當浏覽器需要重新發送數據時, 可以使用這個參數。
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload)
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event)提供應用程序同步一個處理按鍵事件的機會,菜單快捷鍵需要被過濾掉。如果返回true,webview不處理該事件,如果返回false, webview會一直處理這個事件,因此在view 鏈上沒有一個父類可以響應到這個事件。默認行為是return false;參數說明:@param view 接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。@param event 鍵盤事件名@return 如果返回true,應用程序處理該時間,返回false 交有webview處理。
public void onScaleChanged(WebView view, float oldScale, float newScale)通知應用程序webview 要被scale。應用程序可以處理改事件,比如調整適配屏幕。
public void onReceivedLoginRequest(WebView view, String realm, String account, String args)
public void onProgressChanged(WebView view, int newProgress)通知應用程序當前網頁加載的進度。參數說明:@param view 接收WebViewClient的那個實例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是這個webview。
public void onReceivedTitle(WebView view, String title)
public void onReceivedIcon(WebView view, Bitmap icon)
public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed)
public void onShowCustomView(View view, CustomViewCallback callback)
public void onHideCustomView()退出視頻通知
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg)請求創建一個新的窗口,如果我們應用程序接管這個請求,必須返回true,並且創建一個新的webview來承載主窗口。如果應用程序不處理,則需要返回false,默認行為和返回false表現一樣。參數說明:@param view 請求創建新窗口的webview@param isUserGesture 如果是true,則說明是來自用戶收拾操作行為,比如用戶點擊鏈接@param isDialog true 請求創建的新窗口必須是個dialog,而不是全屏的窗口。@param resultMsg 當webview創建時需要發送一個消息。WebView.WebViewTransport.setWebView(WebView)Tips 具體例子如下:
private void createWindow(final Message msg) { WebView.WebViewTransport transport = (WebView.WebViewTransport) msg.obj; final Tab newTab = mWebViewController.openTab(null, Tab.this, true, true); transport.setWebView(newTab.getWebView()); msg.sendToTarget(); }
public void onRequestFocus(WebView view)webview請求得到focus,發生這個主要是當前webview不是前台狀態,是後台webview。
public void onCloseWindow(WebView window)
public boolean onJsAlert(WebView view, String url, String message, JsResult result)
public boolean onJsConfirm(WebView view, String url, String message, JsResult result)
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result)通知應用程序顯示一個對話框,讓用戶選擇是否離開當前頁面,這個回調是javascript中的onbeforeunload事件,如果客戶端返回true,內核會認為客戶端提供對話框。默認行為是return false。參數說明和之前介紹的onJsAlert()相同。
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater)
public void onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater)
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)
public void onGeolocationPermissionsHidePrompt()
public void openFileChooser(ValueCallback這個回調是私有回調, 當頁面需要請求打開系統的文件選擇器,則會回調這個方法,比如我們需要上傳圖片,請求拍照,郵件的附件上傳等等操作。如果不實現這個私有API,則上面的請求都將不會執行。uploadFile, String acceptType, String capture)
先占個位置,過會兒來翻譯,:p DEMO下載地址:http://download.csdn.net/detail/sweetvvck/7728735 Unlike
識別身份證信息需要用到圖像處理的知識,無奈水平不夠,於是尋找第三方接口,但是找到的都是收費的,後來找到一個叫雲脈的產品http://ocr.ccyunmai.com/,發
一、概述講解優化查詢相冊圖片之前,我們先來看下PM提出的需求,PM的需求很簡單,就是要做一個類似微信的本地相冊圖片查詢控件,主要包含兩個兩部分: 進入圖片選擇頁面就要顯
Android 的一個特色就是 application A 的 activity 可以啟動 application B 的 activity,盡管 A 和 B 是毫無干系