劉 杰
(錦州師范高等??茖W(xué)校,遼寧 錦州121000)
關(guān)鍵字:Android;Intent;WebView
隨著各種智能終端用戶的增長和技術(shù)的發(fā)展,智能手機(jī)、平板電腦、智能電視等移動設(shè)備的應(yīng)用范圍越來越廣,利用各類App調(diào)用網(wǎng)頁及數(shù)據(jù)傳輸成為很多用戶的需求.為解決這一問題,移動平臺提供了很多的解決方案,為各領(lǐng)域的工作提供了更加細(xì)分的基于不同專業(yè)化的信息內(nèi)容.Android是專為移動設(shè)備開發(fā)的平臺,應(yīng)用非常廣泛,隨著技術(shù)的發(fā)展Android為實(shí)現(xiàn)不同調(diào)用網(wǎng)頁的功能提供了兩個(gè)方面的技術(shù)方案.如在App中需要跳轉(zhuǎn)到其他瀏覽器來進(jìn)行網(wǎng)頁瀏覽,需要采用意圖Intent方法來實(shí)現(xiàn).Intent的方式不需要聯(lián)網(wǎng)權(quán)限,因?yàn)檎埱缶W(wǎng)絡(luò)顯示網(wǎng)頁的工作是在瀏覽器當(dāng)中完成的,瀏覽器需要的權(quán)限與開發(fā)中的App無關(guān),但在App中可以選擇打開瀏覽器的類型.Intent縮短了用戶在應(yīng)用當(dāng)中的時(shí)間,但會出現(xiàn)用戶調(diào)轉(zhuǎn)到瀏覽器之后不會回到App的問題.WebView方法是在自己的應(yīng)用內(nèi),相當(dāng)于在應(yīng)用內(nèi)部嵌入了一個(gè)Mini瀏覽器.WebView方法可以直接顯示W(wǎng)eb頁面,也可以直接用Html和做布局Javascript交互調(diào)用.WebView方法調(diào)用網(wǎng)頁需要訪問網(wǎng)絡(luò)資源,因此必須在清單文件中增加語句 “Android.permission.internet”,作用是允許使用連接Internet,否則會出現(xiàn) “Web page not available”錯誤或App無法運(yùn)行的后果.Android平臺的兩種技術(shù)解決方案各有優(yōu)缺點(diǎn),在開發(fā)過程中需要根據(jù)需求進(jìn)行判斷選擇.
Intent可以理解為不同組件通信的媒介或者信使,Android四大組件中的三種核心組件Activity、Service和Broadcast Receiver都需要使用Intent來進(jìn)行激活,同時(shí)需要在清單文件中進(jìn)行注冊[1].Intent的主要作用是在相同或不同的應(yīng)用程序間或組件間的后期運(yùn)行時(shí)進(jìn)行綁定.對于不同的組件,Android系統(tǒng)通過使用不同方法提供Intent發(fā)送機(jī)制對組件進(jìn)行激活.
在Intent對象中包含有Component Name(組件名)、Action (行為)、Data(數(shù)據(jù))、Category(類別)、Extra(額外)、Flags(標(biāo)記)等信息.
Action是一個(gè)字符串,用來表示將要執(zhí)行的動作.
WebView組件是專門用來瀏覽網(wǎng)頁的,其使用方法既可以在XML布局文件中使用<WebView>添加標(biāo)記,又可以在Java文件中通過New關(guān)鍵字創(chuàng)建[2].
添加WebView組件后,就可以用該組件提供的方法來執(zhí)行瀏覽器操作了.WebView組件提供的常用方法既可以加載指定URL對應(yīng)的網(wǎng)頁,又可以將指定的字符串?dāng)?shù)據(jù)或基于URL指定的數(shù)據(jù)加載到瀏覽器中.
Android中的Intent有兩個(gè)作用:(1)用來啟動其他新的Activity;(2)作為傳遞數(shù)據(jù)和事件的橋梁.語句Android.intent.action.view用于顯示用戶的數(shù)據(jù),并會根據(jù)設(shè)置的用戶的數(shù)據(jù)類型動作打開相應(yīng)的瀏覽器來代替Activity.
利用意圖Intent調(diào)用網(wǎng)頁的應(yīng)用既可以調(diào)用默認(rèn)瀏覽器,又可以調(diào)用其他瀏覽器.這是UC瀏覽器、Opera、QQ瀏覽器等很多開發(fā)者經(jīng)常使用的.使用App時(shí),當(dāng)觸發(fā)事件發(fā)生時(shí)就可以調(diào)用手機(jī)瀏覽器打開特定網(wǎng)頁,網(wǎng)址可以替換成需要的網(wǎng)址.
調(diào)用默認(rèn)瀏覽器一般使用打開鏈接或使用WebView組件兩種方式來傳遞數(shù)據(jù).
2.1.1 打開鏈接方式
打開鏈接方式首先創(chuàng)建一個(gè)意圖對象,在意圖對象中設(shè)置標(biāo)準(zhǔn)Activity動作Action_view將數(shù)據(jù)顯示給用戶,相對應(yīng)的數(shù)據(jù)為將要進(jìn)行鏈接的地址,然后調(diào)用Intent中的SetClassName方法跳轉(zhuǎn)到不同Applicaiton的Activity,最后使用Intent來啟動Activity并傳遞參數(shù).如下語句所示:
Intent intent = new Intent(Intent.Action_View,ri.parse(" 此處填鏈接"));
Intent.setClassName("當(dāng)前activity路徑"," 跳轉(zhuǎn)activity路徑");getContext().startActivity(intent);
2.1.2 打開本地網(wǎng)頁
Intent intent=new Intent();//創(chuàng)建一個(gè)意圖對象
intent.setAction("android.intent.action.View");//設(shè)置意圖的動作為.action.View
Uri CONTENT_URI_BROWSERS = Uri.parse("content://本地地址");//設(shè)置鏈接的地址
intent.setData(CONTENT_URI_BROWSERS);//設(shè)置意圖的數(shù)據(jù)為CONTENT_URI_BROWSERS
intent.setClassName(" 當(dāng)前activity路徑"," 跳轉(zhuǎn)activity路徑");
startActivity(intent);
在Android開發(fā)中,使用WebView組件可以很方便地實(shí)現(xiàn)Web瀏覽器的功能.使用WebView不但可以更改網(wǎng)頁展現(xiàn)的內(nèi)容及樣式,還可以實(shí)現(xiàn)部分功能的跨平臺[3].WebView組件的作用是用來瀏覽網(wǎng)頁的,和其他組件一樣可以在布局文件中設(shè)置,也可以通過Java代碼調(diào)用Javascript進(jìn)行創(chuàng)建.
2.2.1 在WebView中顯示打開網(wǎng)頁
要實(shí)現(xiàn)打開網(wǎng)頁時(shí)不調(diào)用系統(tǒng)瀏覽器,而是在本W(wǎng)ebView中顯示的功能,首先需要在布局文件中添加 WebView組件,并設(shè)置參數(shù),然后在應(yīng)用的Activity的OnCreate()方法中獲取布局中的WebView組件,并為其指定加載的網(wǎng)頁的URL地址.使用WebView組件不僅可以順利瀏覽已有的網(wǎng)頁,還可以實(shí)現(xiàn)加載HTML代碼的功能.加載HTML代碼可以讓界面更加美觀,可以讓開發(fā)更加簡單、快捷.實(shí)現(xiàn)該功能主要用到了LoadDataWithBaseURL()方法,基本的語法格式如下:
public void loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String historyUrl)
2.2.2 通過Java代碼調(diào)用Javascript實(shí)現(xiàn)Web瀏覽器的功能
在默認(rèn)情況下,WebView組件是不支持Javascript的運(yùn)行的,但是在運(yùn)行某些不得不使用Javascript代碼的網(wǎng)站時(shí),我們需要使用語句來允許Javascript的運(yùn)行,實(shí)現(xiàn)以上功能只需要兩個(gè)步驟即可[4]:
WebView userView= (WebView)findViewById(R.id.conten);//在布局文件中獲取 WebView對象
WebSettings userSettings=userView.getSettings();//通過 WebView中的getSettings方法獲得一個(gè)WebSettings對象
userSettings.setJavaScriptEnabled(true);//設(shè) 置 允許Javascript的運(yùn)行
接下來就可以指定要加載的網(wǎng)頁進(jìn)行瀏覽了.
2.2.3 實(shí)現(xiàn)網(wǎng)絡(luò)瀏覽器的前進(jìn)、后退等功能
一個(gè)功能實(shí)用的網(wǎng)絡(luò)瀏覽器不僅需要支持Javascript,還要包含前進(jìn)、后退等功能.利用WebView組件可以靈活實(shí)現(xiàn)這些功能[5].
(1)按返回鍵時(shí),不退出程序而是返回上一瀏覽頁面:
userView.goBack();
如果在頁面中存在鏈接,點(diǎn)擊該鏈接在當(dāng)前瀏覽器頁面中響應(yīng)不打開新的瀏覽器頁面去響應(yīng)該鏈接,則必須覆蓋 WebView組件中的WebViewClient對象[6].
(2)可以設(shè)置打開頁面時(shí),網(wǎng)頁根據(jù)屏幕的尺寸自適應(yīng)屏幕:
WebView userView = (WebView) findViewById(R.id.conten);
WebSettings userSettings = webView.getSettings();
userbSettings.setUseWideViewPort(true);//此 屬性的作用是可任意進(jìn)行比例縮放
userSettings.setLoadWithOverviewMode(true);//自適應(yīng)屏幕
(3)設(shè)置WebSettings對象屬性,使頁面支持縮放:
WebSettings對象.setBuiltInZoomControls(true);
WebSettings對象 .setSupportZoom(true);
利用Intent調(diào)用網(wǎng)頁只是Intent的其中一項(xiàng)功能,一般還需要配合其他組件的事件和方法.Android中的 WebView存在很大的兼容性問題,不僅僅是因?yàn)锳ndroid系統(tǒng)版本的不同對 WebView產(chǎn)生很大的差異,不同的廠商生產(chǎn)的ROM里面 WebView也存在著很大的差異,具體應(yīng)用的過程中需要配合整個(gè)App的開發(fā)進(jìn)行合理優(yōu)化.利用以上兩種方式都可以達(dá)到調(diào)用網(wǎng)頁的目的,可以根據(jù)實(shí)際需求在開發(fā)中進(jìn)行拓展.