Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 小豬的Android入門之路 Day 8 part 5

小豬的Android入門之路 Day 8 part 5

編輯:關於Android編程

小豬的Android入門之路 Day 8 part 5

Android網絡編程淺析——WebView浏覽器編程初涉

——轉載請注明出處:coder-pig



本節引言:



不知不覺Android網絡編程淺析也快接近尾聲了,在這part中我們學習了很多關於android

在網絡方面的編程,現在我們來回顧一下吧!大笑

part 1:xml文件的簡單了解:以及android中解析xml文件的一些常用方式:sax,dom,pull解析xml

part 2:Android訪問網絡資源:HTML協議,獲取圖片,獲取網頁代碼,解析服務器返回的xml數據,

解析服務器返回的JSON數據

part 3:Android網絡數據的下載:J2SE單線程下載文件,J2SE普通多線程下載文件

Android多線程斷點下載

part 4:Android網絡數據的上傳:GET或POST方式上傳數據;開源框架HttpClient上傳數據;

發送xml數據給服務;通過Http協議上傳文件;WebService平台的了解以及簡單應用

而在Part 5中為大家講解的是Android中提供的一個組件:WebView(網絡視圖)的講解,相比起前面

的內容來說,就容易很多了,那麼,就跟隨筆者的腳步來學習WebView的使用吧!



本節學習路線圖:

筆者要上課,上完回去發哈大笑





正文:

什麼是WebView?

\



<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8aDE+PHN0cm9uZz7U9cO008NXZWJWaWV3Pzwvc3Ryb25nPjwvaDE+Cjxicj4KCjxwPjwvcD4KPGgyPqLZ1rG909TaQWN0aXZpdHnW0LX308NXZWJWaWV3OjwvaDI+CjxwPjxicj4KPC9wPgo8cD48aW1nIHNyYz0="/uploadfile/Collfiles/20140928/20140928103826159.jpg" alt="\">

詳細代碼如下:

package com.jay.example.webviewdemo1;

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

public class MainActivity extends Activity {

	private WebView wView;
	
	@SuppressLint("SetJavaScriptEnabled")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);    
        wView = new WebView(this); 					//①實例化WebView對象  
		wView.setWebViewClient(new WebViewClient()  //②設置在webView點擊打開的新網頁在當前界面顯示,而不跳轉到新的浏覽器中
		{
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}
		});
		
		wView.getSettings().setJavaScriptEnabled(true);  //③設置WebView屬性,運行執行js腳本
		wView.loadUrl("http://www.baidu.com/");          //④調用loadView方法為WebView加入鏈接
		setContentView(wView);                           //⑤調用Activity提供的setContentView將webView顯示出來
	}

	//⑥另外還需要重寫回退按鈕的方法,不然,當我們在WebView中點擊多個頁面後,一按回退就退出程序了的
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if ((keyCode == KeyEvent.KEYCODE_BACK) && wView.canGoBack()) {  
            wView.goBack(); //goBack()表示返回WebView的上一頁面  
            return true;  
        }  
        return false; 
	}
}

效果圖:
\






②在布局代碼中設置WebView


這個其實和在Activity中直接設置的差別不大,代碼都差不多;

另外在第一個代碼中並沒有深入的對回退按鈕的點擊事件只是

設置了webView的回退,相信細心的讀者已經發現,這個程序無論你怎麼

按都是退出不了程序的,哈哈!大笑所以在demo2中給出處理方案;

當webView不能再回退,再設置點擊兩次後退出app,詳情見代碼


布局代碼:activity_main.xml:



    
	


MainActivity.java

package com.jay.example.webviewdemo2;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {

	private EditText editurl;
	private Button btnload;
	private WebView webView;
	private String strurl;
	//定義一個用來存儲點擊退出按鈕時間的便利
	private long exitTime = 0;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		editurl = (EditText) findViewById(R.id.editurl);
		btnload = (Button) findViewById(R.id.btnload);
		webView = (WebView) findViewById(R.id.webview);
		
		//設置WebView屬性,能夠執行Javascript腳本  
        webView.getSettings().setJavaScriptEnabled(true);
        //設置Web視圖
        webView.setWebViewClient(new MyWebViewClient());
        
        btnload.setOnClickListener(new OnClickListener() {			
			@Override
			public void onClick(View v) {
				strurl = editurl.getText().toString();
				//如果用戶輸入的url不帶有http://是找不到網頁的哦!
				if(!strurl.startsWith("http://"))
				{
					strurl = "http://" + strurl;
				}
				webView.loadUrl(strurl);
			}
		});
	}
	
	
	//當我們在webView上打開多個網頁後,我們會習慣性地按回退鍵
	//這個時候我們需要重寫回退鍵按鈕,當點擊後調用的是WebView的goBack方法
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_BACK)
		{
			if(System.currentTimeMillis() - exitTime > 2000)
			{
				
				if(webView.canGoBack())
				{
					webView.goBack();					
				}
				else 
				{
					Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
					exitTime = System.currentTimeMillis();
				}
			}
			else 
			{
				System.exit(0);
			}
		}
		
		return false;
	}
	
	//Web視圖,繼承WebViewClient,重寫shouldOverrideUrlLoading方法
	//這樣做的話可以避免我們點擊了WebView中某個鏈接,繼續在該WebView窗口上打開網頁
	//而不是開啟手機自身的broswer來打開鏈接
	class MyWebViewClient extends WebViewClient
	{
		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			view.loadUrl(url);
			return true;
		}
	}	
}

效果圖:

\





WebView常用的相關方法:


WebView常用方法:

getSettings()
返回一個WebSettings對象,用來控制WebView的屬性設置
loadUrl(String url)
加載指定的Url loadData(String data,String mimeType,String encoding)
加載指定的Data到WebView中.使用"data:"作為標記頭,
改方法不能加載網絡數據.其中mimeType為數據類型如:text\ml,image/jpeg.
encoding為字符的編碼方式
setWebViewClient(WebViewClient client)
為WebView指定一個WebViewClient對象.WebViewClient可
以輔助WebView處理各種通知,請求等事件。
setWebChromeClient(WebChromeClient client)
為WebView指定一個WebChromeClient對象,WebChromeClient專門用來輔助WebView處理js的對話框,網站title,網站圖標,加載進度條等









WebSettings的常用方法:

setJavaScriptEnabled(boolean flag)
設置是否支持JavaScript
setDefaultFontSize(int size)
設置默認的字體大小 setDefaultTextEncodingName(String encoding)
設置默認字符的編碼方式 setAllowFileAccess(boolean allow):
設置是否允許訪問文件數據
setDatabaseEnabled(boolean flag)
設置是否可以使用數據庫相關的api
setDatabasePath(String databasePath) 若使用數據庫API,該方法指定數據庫文件的路徑 setBlockNetworkImage(boolean flag) 設置是否禁止顯示圖片,true表示禁止圖片 setSavePassword(boolean save) 設置是否保存密碼 setTextize(WebSetting.TextSize) 設置頁面文字大小 setSupportZoom(bollean support) 設置是否支持變焦












WebViewClient的常用方法


onPageStared(WebView view,String url) 通知主程序網頁開始加載 onPageFinished(WebView view,String url,Bitmap favicon)
通知主程序,網頁加載完畢 doUpdateVisitedHistory(WebView view,String url,boolean isReload)
更新歷史記錄 onLoadResource(WebView view,String url)
通知主程序WebView即將加載指定url的資源 onScaleChanged(WebView view,float oldScale,float newScale)
ViewView的縮放發生改變時調用 shouldOverrideKeyEvent(WebView view,KeyEvent event) 控制webView是否處理按鍵時間,如果返回true
則WebView不處理,返回false則處理
shouldOverrideUrlLoading(WebView view,String url) 控制對新加載的Url的處理,返回true,說明主程序處理
WebView不做處理,返回false意味著WebView會
對其進行處理
onReceivedError(WebView view,int errorCode,String description,
String failingUrl)
遇到不可恢復的錯誤信息時調用














WebChromeClient的常用方法


onJsAlert(WebView view,String url,String message,JsResult result) 處理Js中的Alert對話框 onJsConfirm(WebView view,String url,String message,JsResult result)
處理Js中的Confirm對話框 onJsPrompt(WebView view,String url,String message
String defaultValue,,JsPromptResult result)

處理Js中的Prompt對話框 onProgressChanged(WebView view,int newProgress)
當加載進度條發生改變時調用











使用WebView中的js調用Android方法:


在開始講解這裡之前,相信大家都知道webView是一個類似於浏覽器的組件了,他就是用來加載網頁的;

但是它真的只有加載網頁那麼簡單麼?答案肯定是否定的;首先大家都知道HTML是拿來做靜態網站的吧

但是Android的界面開發可以采用HTML網頁技術,相比起我們用Layout技術慢慢布局顯得更加方便,快捷

當然,屏幕適配是需要解決的問題;另外在我們的HTML中需要獲取Android設備的相關信息時,比如獲取設備

所在的經緯度(定位),或者讀取聯系人,打電話,發送信息等的!而實現互訪的原理如下:

html——js——java,就是說以js為媒介,只需要傳遞JSon類型的數據即可!


注意:為了節省篇幅.以下代碼使用的html文件都是放到assets目錄下的,訪問時

直接用loadUrl("file:///android_asset/~")即可



代碼示例:

①html通過js顯示Toast與普通列表的對話框

效果圖:

\\\


核心代碼:

自定義一個Object對象,js通過該類暴露的方法來調用Android

MyObject.java:

package com.jay.example.webviewdemo3;

import android.app.AlertDialog;
import android.content.Context;
import android.widget.Toast;

public class MyObject {
	Context context;
	public MyObject(Context context) {
		this.context = context;
	}
	
	//將顯示Toast和對話框的方法暴露給JS腳本調用
	public void showToast(String name)
	{
		Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
	}
	public void showDialog()
	{
		new AlertDialog.Builder(context)
		.setTitle("聯系人列表").setIcon(R.drawable.ic_launcher)
		.setItems(new String[]{"小王","小壞","小豬","小狗","小貓"}, null)
		.setPositiveButton("確定", null).create().show();
	}
}

創建一個html文件,內容如下,接著把它放到工程的assets目錄下:

my.html



  
    Js調用Android
  
  
  
    
    
  


在MainActivity中完成WebView的初始化,設置運行調用js,最後通過addJavascriptIntefcae()將

對象暴露給Js,js就可以通過該對象操作與Android相關的操作了

package com.jay.example.webviewdemo3;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;


public class MainActivity extends Activity {

	private WebView webView;
	
	
	@SuppressLint("JavascriptInterface")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		webView = (WebView) findViewById(R.id.webView);
		webView.loadUrl("file:///android_asset/my.html");
		WebSettings webSettings = webView.getSettings();
		//①設置WebView允許調用js
		webSettings.setJavaScriptEnabled(true);
		webSettings.setDefaultTextEncodingName("UTF-8");
		//②將object對象暴露給Js,調用addjavascriptInterface
		webView.addJavascriptInterface(new MyObject(MainActivity.this), "myObj");
	}
}
ps:上述代碼在4.2及以上的虛擬機上都是運行後都是沒有點擊效果的,

筆者也不知道為什麼,但是在真機上都是可以的!




②HTML通過js調用三種不同的對話框

效果圖:

\

核心代碼:


創建一個html文件,然後把它放到工程的assets目錄下:

my.html:




  
	測試Js的三種不同對話框
    <script language="JavaScript">
    	function alertFun()
    	{
    		alert("Alert警告對話框!");
    	}
    	function confirmFun()
    	{
    		if(confirm("訪問百度?"))
			{location.href = "http://www.baidu.com";}
    		else alert("取消訪問!");
    	}
    	function promptFun()
    	{
    		var word = prompt("Prompt對話框","請輸入點什麼...:");
    		if(word)
    		{
    			alert("你輸入了:"+word)
    		}else{alert("呵呵,你什麼都沒寫!");}
    	}
    </script> 
  
  
  
    

三種對話框的使用

Alert對話框

Confirm對話框

Prompt對話框


接著一次創建主布局與prompt的布局

activity_main.xml



    
	
	
prompt_view.xml:



    
	
	
    


最後編寫我們的MainActivity即可,設置webView相關屬性以及重寫WebChromeClient的

三種不同的對話框的方法即可

package com.jay.example.webviewdemo4;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;


public class MainActivity extends Activity {

	private EditText editurl;
	private Button btnload;
	private WebView webView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		editurl = (EditText) findViewById(R.id.editurl);
		btnload = (Button) findViewById(R.id.btnload);
		webView = (WebView) findViewById(R.id.webview);
		
		//獲得WebSetting對象,支持js腳本,可訪問文件,支持縮放,以及編碼方式
		WebSettings webSettings = webView.getSettings();
		webSettings.setJavaScriptEnabled(true);
		webSettings.setAllowFileAccess(true);
		webSettings.setBuiltInZoomControls(true);
		webSettings.setDefaultTextEncodingName("UTF-8");
		//設置WebChromeClient,處理網頁中的各種js事件
		webView.setWebChromeClient(new MyWebChromeClient());
		btnload.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String url = editurl.getText().toString();
				webView.loadUrl(url);
				
			}
		});
	}
	
	
	//這裡需要自定義一個類實現WebChromeClient類,並重寫三種不同對話框的處理方法
	//分別重寫onJsAlert,onJsConfirm,onJsPrompt方法
	class MyWebChromeClient extends WebChromeClient
	{
		@Override
		public boolean onJsAlert(WebView view, String url, String message,
				final JsResult result) {
			//創建一個Builder來顯示網頁中的對話框
			new Builder(MainActivity.this).setTitle("Alert對話框").setMessage(message)
			.setPositiveButton("確定",new OnClickListener() {				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					result.confirm();					
				}
			}).setCancelable(false).show();
			return true;
		}
		
		
		@Override
		public boolean onJsConfirm(WebView view, String url, String message,
				final JsResult result) {
			new Builder(MainActivity.this).setTitle("Confirm對話框").setMessage(message)
			.setPositiveButton("確定", new OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					result.confirm();					
				}
			})
			.setNegativeButton("取消", new OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					result.cancel();					
				}
			}).setCancelable(false).show();
			return true;
		}
		
		@Override
		public boolean onJsPrompt(WebView view, String url, String message,
				String defaultValue, final JsPromptResult result) {
			//①獲得一個LayoutInflater對象factory,加載指定布局成相應對象
			final LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
			final View myview = inflater.inflate(R.layout.prompt_view, null);
			//設置TextView對應網頁中的提示信息,edit設置來自於網頁的默認文字
			((TextView) myview.findViewById(R.id.text)).setText(message);
			((EditText) myview.findViewById(R.id.edit)).setText(defaultValue);
			//定義對話框上的確定按鈕
			new Builder(MainActivity.this).setTitle("Prompt對話框").setView(myview)
			.setPositiveButton("確定", new OnClickListener() {				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					//單機確定後取得輸入的值,傳給網頁處理
					String value = ((EditText)myview.findViewById(R.id.edit)).getText().toString();
					result.confirm(value);					
				}
			})
			.setNegativeButton("取消", new OnClickListener() {				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					result.cancel();				
				}
			}).show();			
			return true;
		}
		
		
		
	}
	
}


③HTML通過js讀取Android聯系人並顯示:

該代碼實現的是通過js讀取Android手機中聯系列表,然後顯示到HTML中

當我們點擊某個電話號碼時,會直接跳轉到撥號頁面

效果圖:

\\



首先是創建我們的HTML文件,這裡可能有部分對JS不熟悉的朋友,筆者也是如此,因為JS的問題,筆者卡了

一晚上都沒找到錯誤!後來才發現自己的Js寫錯了,這裡有興趣的可以研究下流程,不會的就直接復制可以了

通常HTML都是有人編寫的,我們要做的只是WebView上的開發,以及定義用於JS傳遞數據相關的對象即可!

下述代碼的簡單原理是:利用onload()在網頁加載的時候加載相應的js腳本,而js腳本中定義的一個函數是

取出傳遞過來的對象,獲取裡面的數據,通過for循環以單元行的形式打印出來!


my.html:




	
    顯示獲取的聯系人列表
    <script language="JavaScript">	
		function show(jsondata)
		{
			//將傳遞過來的Json轉換為對象
			var jsonobjs = eval(jsondata);
			//獲取下面定義的表格
			var table = document.getElementById("PersonTable");
			//遍歷上面創建的Json對象,將每個對象添加為
			//表格中的一行,而它的每個屬性作為一列
			for(var i = 0;i < jsonobjs.length;i++)
			{
				//添加一行,三個單元格:
				var tr = table.insertRow(table.rows.length);
				var td1 = tr.insertCell(0);
				var td2 = tr.insertCell(1);
				td2.align = "center";
				var td3 = tr.insertCell(2);
				//設置單元格的內容和屬性
				//其中innerHTML為設置或者獲取位於對象起始和結束標簽內的HTML
				//jsonobjs[i]為對象數組中的第i個對象
				td1.innerHTML = jsonobjs[i].id;
				td2.innerHTML = jsonobjs[i].name;
				//為現實的內容添加超鏈接,超鏈接會調用Java代碼中的
				//call方法並且把內容作為參數傳遞過去
				td3.innerHTML = ""
				+jsonobjs[i].phone + "";;
			}
		}
	</script>	





	
	
	
		用戶id
		姓名
		號碼
	
		







定義一個業務bean類:

contact.java

package com.jay.example.webviewdemo5;

public class Contact {
	private Integer id;
	private String name;
	private String phone;
	
	public Contact(){}
	
	public Contact(Integer id, String name, String phone) {
		super();
		this.id = id;
		this.name = name;
		this.phone = phone;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}
	
	
	
	
}


最後是MainActivity.java文件,這裡為了節省篇幅,把獲取聯系人的方法也定義

在了該類中,實際開發中不要這樣做!!!

package com.jay.example.webviewdemo5;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.webkit.WebView;

public class MainActivity extends Activity {

	private WebView webView;
	
	
	@SuppressLint("JavascriptInterface")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		webView = (WebView) findViewById(R.id.webview);
		
		//設置WebView的相關設置,依次是:
		//支持js,不保存表單,不保存密碼,不支持縮放
		//同時綁定Java對象
		webView.getSettings().setJavaScriptEnabled(true);
		webView.getSettings().setSaveFormData(false);
		webView.getSettings().setSavePassword(false);
		webView.getSettings().setSupportZoom(false);
		webView.getSettings().setDefaultTextEncodingName("UTF-8");
		webView.addJavascriptInterface(new SharpJS(), "sharp");
		webView.loadUrl("file:///android_asset/my.html");
		System.out.println("webView相關參數設置");
				
	}
	
	//自定義一個Js的業務類,傳遞給JS的對象就是這個,調用時直接javascript:sharp.contactlist()
	public class SharpJS
	{
		public void contactlist()
		{
			try
			{
				System.out.println("contactlist()方法執行了!");
				String json = buildJson(getContacts());
				webView.loadUrl("javascript:show('"+json+"')");
			}catch(Exception e){System.out.println("設置數據失敗" + e);}
		}
		
		public void call(String phone)
		{
			System.out.println("call()方法執行了!");
			Intent it = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phone));
			startActivity(it);
		}
	}
	
	
	
	
	
	//將獲取到的聯系人集合寫入到JsonObject對象中,再添加到JsonArray數組中
	public String buildJson(List contacts)throws Exception
	{
		JSONArray array = new JSONArray();
		for(Contact contact:contacts)
		{
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("id", contact.getId());
			jsonObject.put("name", contact.getName());
			jsonObject.put("phone", contact.getPhone());
			array.put(jsonObject);
		}
		return array.toString();
	}
	
	
	
	//定義一個獲取聯系人的方法,返回的是List的數據
	public List getContacts()  
    {  
		System.out.println("getContacts方法執行了");
        List Contacts = new ArrayList();  
        ContentResolver cr = getApplicationContext().getContentResolver();  
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);  
        while(cursor.moveToNext()){  
            Contact Contact = new Contact();  
            //獲取聯系人id  
            String contatId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
            Contact.setId(Integer.parseInt(contatId));  
            //獲取聯系人姓名  
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));  
            Contact.setName(name);  
            //因為一個聯系人的電話號碼可能有幾個,但我們這裡僅僅是獲取一個就夠了,所以就不循環遍歷了  
            Cursor phones = getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  
                    null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contatId, null, null);  
            phones.moveToFirst();  
            String num = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));  
            Contact.setPhone(num);  
            Contacts.add(Contact);  
            phones.close();  
        }  
        cursor.close();
        for(Contact ct:Contacts)
        {
        	System.out.println(ct.getId() + "*" + ct.getName() + "*" + ct.getPhone());
        }
        return Contacts;  
    }  
	
	
}



本節小結:

1.對WebViwe進行簡單了解,在Activity中調用WebView中的兩種方式

2.WebView的相關方法:①WebView②WebSetting③WebViewClient④WebChromeClient

3.Html通過WebView的js調用Android中的方法流程總結:

①webView.getSettings().setJavaScriptEnabled(true); 設置啟動JS調用功能

②webView.addJavascriptInterface(new SharpJS(), "sharp"); 將object對象暴露給JS,

③JS可以根據sharp操作SharpJS對象中的參數與方法



另外,上述demo可能需要加入以下權限,自己看情況添加:

//聯網

//打電話

//讀取聯系人





相關代碼下載:


1)直接在Activity中使用WebView:WebViewDemo1.zip

2)在布局中設置靜態WebView:WebViewDemo2

3)HTML通過js彈出Toast和列表對話框:WebViewDemo3.zip

4)HTML通過js彈出三種不同對話框:WebViewDemo4.zip

5)HTML通過WebView的js讀取Android聯系人並顯示:WebViewDemo5.zip












  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved