国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python的Android應用GUI的開發(fā)

2013-01-16 09:20何浩李滔
電子設計工程 2013年9期
關鍵詞:腳本插件調(diào)用

何浩,李滔

(西北工業(yè)大學 電子信息學院,陜西 西安 710129)

經(jīng)過多年的發(fā)展,第三代數(shù)字通信(3G)技術(shù)獲得了廣泛的接受,它為移動終端用戶帶來了更快的數(shù)據(jù)傳輸速率?,F(xiàn)在移動終端已不再僅是通訊網(wǎng)絡的終端,還將成為互聯(lián)網(wǎng)的終端。因此,移動終端的應用軟件和需要的服務將會有很大的發(fā)展空間。Google為此于2007年11月推出了一個專為移動設備設計的軟件平臺——Android。

Android是一套真正意義上的開放性移動設備綜合平臺,它包括操作系統(tǒng)、中間件和一些關鍵的平臺應用。Android最大特點在于它是一個開放的體系架構(gòu),具有非常好的開發(fā)和調(diào)試環(huán)境,而且還支持各種可擴展的用戶體驗,Android里面具有非常豐富的圖形系統(tǒng),對多媒體的支持功能和非常強大的瀏覽器[1-3]。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2012年11月數(shù)據(jù),Android占據(jù)全球智能手機操作系統(tǒng)市場76%的份額,中國市場占有率為90%。

伴隨著Android用戶的迅猛增長,手機應用創(chuàng)新進入了“爆發(fā)期”,Android電子市場能夠持續(xù)保持強勁增長速度已經(jīng)創(chuàng)造了新的奇跡,應用程序和游戲數(shù)量的增長速度已經(jīng)超出了預期。官方最近給出的數(shù)字顯示,2012年1月,Android電子市場中的活躍應用已超過40萬,這距離突破30萬應用僅僅用了4個月時間。

然而,Android應用的開發(fā)開始時只支持Java語言,現(xiàn)在幾乎所有的應用都是使用Java語言開發(fā)的,但是對于Android應用開發(fā)的愛好者來說,這并不是個好消息,因為并不是所有人都喜歡或者熟悉Java。而且雖然Java在開發(fā)Android應用發(fā)面的確功能強大,但是也正因如此,它在完成某些簡單任務時顯得過于繁冗復雜,不夠靈巧。Google及時的認識到這對Android發(fā)展的不利。于是發(fā)起了SL4A(Scripting Layer for Android)項目,它的目標就是可以用各種腳本語言開發(fā) android程序,目前支持 Python、Beanshell、JRuby、Lua、Perl、PHP 和 Rhino等。 有了 SL4A 的支持,我們就可以用Python來開發(fā)Android應用了。

1 基于Python的Android應用的開發(fā)

Python是一種開放源代碼的腳本編程語言,這種腳本語言特別強調(diào)開發(fā)速度和代碼的清晰程度。它可以用來開發(fā)各種程序,從簡單的腳本任務到復雜的、面向?qū)ο蟮膽贸绦蚨加写箫@身手的地方。Python還被當作一種入門程序員最適合掌握的優(yōu)秀語言,因為它免費、面向?qū)ο蟆U展性強同時執(zhí)行嚴格的編碼標準[4-6]。

SL4A的全稱為Scripting Layer for Android,它實現(xiàn)了本地腳本和原生態(tài)Android程序的內(nèi)部消息通信,所以任何本地腳本語言,只要實現(xiàn)了這套兼容的JSON RPC通信接口,就可以呼叫SL4A的RPC Server端程序[7]。

圖1 SL4A總體架構(gòu)Fig.1 General framework

從圖1可以看出,SL4A總體包括Client和Server兩部分來實現(xiàn)通信和整體架構(gòu)的獨立性,Client端負責解析本地腳本,這樣只要本地腳本實現(xiàn)了兼容的接口,就可以方便實現(xiàn)腳本語言的擴展,而Server端則封裝了Android原生態(tài)程序的設計,即使在Android底層API發(fā)生變化的時候,Client端也基本不會受到影響,Client把腳本中解析出來的函數(shù)調(diào)用通過RPC通信,遠程呼叫Server端代理接口,然后由Server調(diào)用原生態(tài)的Android API(Android Facade架構(gòu))來完成具體的功能,在調(diào)用結(jié)束后,Server端將執(zhí)行結(jié)果反饋給Client端。這樣就實現(xiàn)了用Python對Android應用的開發(fā)。

2 開發(fā)工具

我們可以直接在Android官網(wǎng)上下載到全套的應用開發(fā)包,下載地址為 http://developer.android.com/sdk/index.html,其中包括必要的 Android SDK組件和已安裝好ADT(Android Developer Tools)插件的Eclipse IDE。Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境。最初主要用來Java語言開發(fā),但通過安裝相應的插件也可使其作為C++、Python、PHP等其他語言的開發(fā)工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持,使得Eclipse擁有較佳的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。

為了能在Eclipse中用Python語言做Android應用的開發(fā),除了安裝ADT插件外還需要Pydev插件。在Eclipse中安裝Pydev插件時,點擊菜單欄中的幫助按鈕,在打開的下拉式菜單中選擇Install New Software選項。此時會彈出一個新的對話框,點擊Add按鈕,然后在新對話框中的Name欄輸入插件的名字,在Location欄輸入插件的下載地址,Eclipse的Pydev在線下載安裝地址為:http://Pydev.org/updates,完成后點擊OK,選擇所要安裝的插件包,點擊Next,等待下載安裝完成。當安裝完成后,Eclipse需要重新啟動。重啟之后,就可以在Eclipse中用Python做Android應用開發(fā)了。

3 使用Python實現(xiàn)Android應用的GUI開發(fā)

GUI(Graphical User Interface)即圖形用戶接口,是人機交互最基本的工具,任何一款手機應用或是電腦軟件都無法擺脫GUI的開發(fā)。在使用Python的探索開發(fā)過程中,我們發(fā)現(xiàn)有兩種最基本的方式通過SL4A實現(xiàn)與用戶的交互。第一種方法,直接調(diào)用Android API來生成對話框,如警告對話框。這是最簡單、最直接的向用戶傳遞信息并接受用戶反饋的方法。第二種方法是使用HTML或者JavaScript來建立用戶界面(UI),Python在后臺做其他處理。

3.1 使用Python開發(fā)對話框類型的GUI

3.1.1 對話框

SL4A中包含一個UI facade用來訪問Android API中可調(diào)用的基本對話框。通過代碼來調(diào)用這些對話框非常的簡單。我們所需做的只是設置我們所想顯示的按鈕,項目和題目的內(nèi)容,然后調(diào)用ShowDialog就行了。同時,我們可以通過調(diào)用dialogGetResponse來查看用戶的行為。

如果我們想給用戶顯示一條簡短的消息,可以使用makeToast API功能,程序運行后,會顯示如圖2所示的對話框。 它有一個標題 (Hello! ), 有一段提示 (What is your name?),并且getInput方法會提供一個默認的單行輸入欄和一個OK按鈕。

圖2 帶標題、提示行、輸入框和OK按鈕的對話框Fig.2 Input dialog box with title, prompt, input box, and Ok button

當用戶輸入名字并點擊OK后,getInput功能將返回一個元組格式的result對象。在這個例子中,返回的內(nèi)容為:Result(id=0, result=u’Kentucky Rose’, error=None)

每個result都有一個唯一的ID使其可被追蹤,在這個例子中ID為0。元組的第二個元素就是用戶在輸入欄所輸入的文本內(nèi)容。每個元組同時還包含一個error元素,用來將可能遇到的各種錯誤信息反饋給調(diào)用者。在這個例子中,我們看到error=None,也就是說沒有錯誤。當OK鍵按下后我們就可以看到會彈出一個對話框顯示用戶所輸入的內(nèi)容,該對話框會持續(xù)一小段時間后自動消失。

3.1.2 選項菜單

大部分Android應用都有一個選擇菜單,可以讓用戶設定一些參數(shù)或者應用功能的其他選擇。SL4A通過調(diào)用addOptionsMenuItem來實現(xiàn)選擇菜單項的創(chuàng)建,包括選擇菜單按鈕的創(chuàng)建,按鈕名稱的定義,按鈕圖標的選擇等。調(diào)出菜單項的時候必須有一個系統(tǒng)界面,我們可以調(diào)用webViewShow方便的建立一個空白的系統(tǒng)界面。運行程序后按下設備的菜單鍵就會彈出如圖3所示的菜單項。

圖3 菜單項實例Fig.3 Example options menu

當按下Sensible后會得到以下result:

{u ‘data’:u ‘I bet.’, u ‘name’:u ‘sensible’, u‘time’:1301074971174000L}

需注意這個result事實上是一個event的輸出,它包含了3個已命名項,分別為:data、name和time。接下來需要做的就是完成用戶按下每一個菜單選項后所實現(xiàn)的具體功能了。

3.1.3 通過dialogCreateAlert實現(xiàn)文件列表

在Android應用中,我們經(jīng)常會需要給用戶一個文件列表,比如在閱讀器中添加本地圖書,或者管理本設備SD卡中的文件的時候。SL4A為我們提供了dialogCreateAlert的方法,可以輕松實現(xiàn)這個界面,運行程序后所出現(xiàn)的界面如圖4所示,界面的頂部標題中顯示的是用戶所打開文件夾的路徑。

圖4 簡單的文件選擇對話框Fig.4 Simple file chooser dialog box

3.2 通過HTML建立Python GUI

在這種方法下,最基本的做法就是使用HTML或者JavaScript來建立用戶見面,Python在后臺做進程處理工作。Python也可以建立HTML文件不使用任何用戶界面來顯示一些基本信息。

3.2.1 通過HTML顯示基本信息

應用中經(jīng)常會遇到需要給用戶簡單的顯示大塊信息的時候,這時候可能是一個列表或者一個文本對話框,這兩種方法用HTML實現(xiàn)都非常簡單。我們可以用程序生成一個HTML文件然后通過調(diào)用webViewShow API來啟動它。

在下面我做了個簡單的程序,它將獲取電池狀態(tài),并生成包含所有電池信息的HTML文件,然后通過調(diào)用webViewShow API來啟動這個HTML文件。運行此程序后將在/sdcard/sl4a/scripts路徑下產(chǎn)生一個名為battstats.html的文件。其顯示結(jié)果如圖5所示。

圖5 使用簡單的HTML文件顯示電池狀態(tài)Fig.5 Use of a simple HTML file to display battery status

3.2.2 HTML和JavaScript的應用

當我們想給顯示信息中加入一些交互元素的時候,就需要引入JavaScript了。SL4A提供了Python和web page的通信方法,并且events和JavaScript代碼也可以加入到web page中,但是在做API調(diào)用之前我們必須先在JavaScript代碼中用 var droid=new Android()來定義Android對象。

下面我嘗試做了一個較復雜的設置界面,它包含多個輸入框和多種輸入形式。用戶可以通過這個界面對設備的相關設置進行調(diào)整,包括屏幕亮度,媒體音量,鈴聲音量和WIFI模式等。首先我們需要用HTML制作一個界面。界面完成后我們遇到的首要問題就是如何將用戶設置的各項參數(shù)傳遞給Python,讓Python來做出相應的后臺處理。誠如前面所說,這個任務將交給JavaScript來完成,完成提取參數(shù)的關鍵工作是由document.getElementById()實現(xiàn)的。當設置參數(shù)成功傳遞給Python后,Python將根據(jù)用戶的具體設置對手機各硬件設備進行相應的調(diào)整。Python部分的核心代碼如下:

droid=android.Android()

droid.webViewShow(‘file:///sdcard/sl4a/scripts/settings.html’)

while True:

result=droid.waitForEvent('save').result

data=urlparse.parse_qs(result['data'][1:])

droid.toggleAirplaneMode('airplane'in data)

droid.toggleWifiState('wifi'in data)

droid.setScreenBrightness('screen'in data and 255 or 0)

運行程序的顯示結(jié)果如圖6所示。

圖6 設置界面Fig.6 My setting interface

4 結(jié)束語

Python是一門年輕、開源、充滿活力的腳本編程語言。在SL4A的支持下,Python可輕松實現(xiàn)Android平臺下應用的UI設計。它既可以通過調(diào)用Android的各種對話框?qū)崿F(xiàn)與用戶的交互,也可以通過與HTML和JavaScript的配合來實現(xiàn)簡潔大方的框架式交互界面。隨著SL4A項目的影響越來越大,將有更多的Python愛好者嘗試并研究用Python來編寫Android應用,Python語言將會在Android應用開發(fā)中大有作為。

[1]鄭萌,趙常松.Android應用開發(fā)與典型案例[M].北京:電子工業(yè)出版社,2012.

[2]Mark L.Murphy.BeginningAndroid 2[M].United States of America:Apress,2010.

[3]Meier R.Professional Android Application Develop[M].WROX PR/PEER INFORMATION INC,2009.

[4]Steven Bird,Edward Loper,Ewan Klein.Natural language processing with Python [M].United States of America:O’Reilly Media,2009.

[5]Paul Barry.Head First Python[M].United States of America:O’Reilly,2011.

[6]Beazley D M.Python essential reference[M].Fourth Edition.Beijing:Post and Telecom Press,2011.

[7]Paul Ferrill.Pro android python with SL4A[M].United States of America:Apress,2011.

猜你喜歡
腳本插件調(diào)用
酒駕
安奇奇與小cool 龍(第二回)
自編插件完善App Inventor與樂高機器人通信
核電項目物項調(diào)用管理的應用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
快樂假期
小編的新年愿望
基于jQUerY的自定義插件開發(fā)
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
基于Revit MEP的插件制作探討
玉门市| 泽普县| 鞍山市| 上思县| 漳平市| 巴彦县| 丰顺县| 隆尧县| 娄底市| 类乌齐县| 孝感市| 西盟| 哈尔滨市| 扎囊县| 海宁市| 丹江口市| 凤凰县| 成都市| 华池县| 青河县| 边坝县| 资中县| 合山市| 射洪县| 武冈市| 绥芬河市| 唐海县| 彭阳县| 武陟县| 家居| 米林县| 鸡西市| 清镇市| 页游| 井冈山市| 靖西县| 丰宁| 墨玉县| 延庆县| 右玉县| 九台市|