亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        JavaReflector技術(shù)在AppInventor編程中擴(kuò)展功能的研究

        2024-01-12 04:39:02高占江韓丹
        微型電腦應(yīng)用 2023年12期
        關(guān)鍵詞:調(diào)用列表開發(fā)者

        高占江, 韓丹

        (青島科技大學(xué)(高密校區(qū)), 計(jì)算機(jī)系, 山東, 濰坊 261500)

        0 引言

        移動(dòng)應(yīng)用開發(fā)已成為現(xiàn)代科技發(fā)展的重要領(lǐng)域,而AppInventor的出現(xiàn)為普通用戶提供了一種簡(jiǎn)單、直觀的方式來(lái)創(chuàng)建自己的移動(dòng)應(yīng)用。然而,雖然AppInventor提供了豐富的積木塊用于實(shí)現(xiàn)各種功能,但其積木塊的種類和數(shù)量仍然存在一定的限制。這意味著開發(fā)者在設(shè)計(jì)應(yīng)用時(shí)可能會(huì)受到功能上的限制,無(wú)法實(shí)現(xiàn)一些個(gè)性化或復(fù)雜的功能。為了解決這個(gè)問(wèn)題,本文提出一種創(chuàng)新的方法,即利用JavaReflector技術(shù)在AppInventor中調(diào)用Android-SDK的Java語(yǔ)言的API。通過(guò)這種方法,開發(fā)者可以直接閱讀Java API文檔和Android API文檔,并在AppInventor中在不需要自己定制拓展組件的情況下調(diào)用Android-SDK所提供的API。這種技術(shù)為開發(fā)者提供了一個(gè)橋梁,能夠?qū)ppInventor與Android SDK中API無(wú)縫連接起來(lái),從而實(shí)現(xiàn)功能的無(wú)限擴(kuò)展。

        本文詳細(xì)介紹JavaReflector技術(shù)在AppInventor中的應(yīng)用,探討其實(shí)現(xiàn)的原理和方法,并通過(guò)一系列實(shí)驗(yàn)驗(yàn)證其可行性和有效性。我們相信,通過(guò)這種創(chuàng)新的方法,能夠幫助開發(fā)者在AppInventor中實(shí)現(xiàn)更加豐富、個(gè)性化的功能,從而推動(dòng)移動(dòng)應(yīng)用的發(fā)展和創(chuàng)新。

        1 AppInventor開發(fā)模式

        當(dāng)今社會(huì)智能終端的應(yīng)用無(wú)處不在,移動(dòng)智能端操作系統(tǒng)Android占有了市場(chǎng)70%以上的份額是因?yàn)锳ndroid系統(tǒng)的App的開發(fā)吸引了更多開發(fā)者的眼球。

        Android操作系統(tǒng)中編程方式很多,其中Google公司開發(fā)的AppInventor編程方式吸引了很多初學(xué)者,特別是中小學(xué)編程愛好者的目光。Google AppInventor[1]編程方式是一個(gè)完全在線的Android系統(tǒng)的App開發(fā)模式,它不需要開發(fā)者使用任何一種編程語(yǔ)言,只需要用一種類似積木式的搭建方式來(lái)開發(fā)自己的應(yīng)用程序,這種方式讓很多對(duì)編程望而卻步的初學(xué)者興趣倍增,除此之外,它支持樂(lè)高NXT機(jī)器人,對(duì)機(jī)器人開發(fā)者來(lái)說(shuō)更是一大福音。

        2 AppInventor局限性

        AppInventor中所有的組件都可以直接被拖曳使用,并且每個(gè)組件都將其屬性和相關(guān)的事件被可視化處理,構(gòu)造成了具有特殊接口的“積木”。開發(fā)者的需求是千變?nèi)f化的,但AppInventor中每個(gè)組件提供的屬性是有限的,每個(gè)組件的方法也是有限的,從這方面考慮,這種編程方式是非常受限的,對(duì)有過(guò)其他編程語(yǔ)言開發(fā)經(jīng)驗(yàn)的開發(fā)者來(lái)說(shuō),使用Java語(yǔ)言編寫Android App可以使用很多的類和對(duì)象,更有無(wú)數(shù)的方法和函數(shù)去調(diào)用,對(duì)比在AppInventor中可調(diào)用的類或者函數(shù)變得非常局限,這給這種開發(fā)方式一個(gè)啟發(fā)。

        3 擴(kuò)展的實(shí)現(xiàn)

        本文在AppInventor中提供一種擴(kuò)展功能的調(diào)用方式,允許在積木式的編程環(huán)境中調(diào)用Android SDK[2],實(shí)現(xiàn)與代碼編程同樣的功能效果。JavaReflector技術(shù)的作用是通過(guò)“積木塊”調(diào)用Android系統(tǒng)底層接口,能夠充分使用SDK提供的各種類、對(duì)象、成員變量屬性和方法,即Android SDK提供的所有方法和接口都能夠轉(zhuǎn)化為“積木塊”在AppInventor編程環(huán)境中被使用,擴(kuò)充了開發(fā)的邏輯環(huán)境。

        3.1 可見組件塊的實(shí)現(xiàn)方式

        在Android的原生態(tài)編程環(huán)境中,使用Java語(yǔ)言編程是Android編程最常用的方式,“按鈕”在代碼編程中是調(diào)用底層Android SDK中的android.widget.Button[3]類,在Eclipse或AndroidStudio等代碼開發(fā)環(huán)境中,可以直接使用類Button創(chuàng)建的對(duì)象調(diào)用其屬性或方法實(shí)現(xiàn)相應(yīng)的功能,如更改按鈕顯示的文本調(diào)用對(duì)象Button的setText()方法即可。在AppInventor中的“按鈕”是一種可視化的組件,開發(fā)者直接拖曳到組件設(shè)計(jì)面板即可,想更改其文本可以直接使用其提供的塊,如圖1所示。

        圖1 更改按鈕文本塊

        但AppInventor提供的類似這種事件塊是很有限的,因?yàn)锳ppInventor中拖曳的“按鈕”是類com.google.appinventor.components.runtime.Button,它是對(duì)Android SDK中提供的android.widget.Button類的封裝,所以通過(guò)JavaReflector技術(shù)構(gòu)建起這2個(gè)類之間的橋梁,就可以通過(guò)AppInventor中的“塊”調(diào)用SDK中的屬性和方法。在組件面板中拖入JavaReflector組件[4],通過(guò)圖2的方法獲取AppInventor中的“按鈕1”所封裝的SDK中的Button類的對(duì)象(Button類的實(shí)例)。

        圖2 獲取按鈕的內(nèi)部實(shí)例

        獲得android.widget.Button類的實(shí)例之后,可以通過(guò)該實(shí)例調(diào)用其方法或?qū)傩詫?shí)現(xiàn)相應(yīng)的動(dòng)作,例如在SDK中對(duì)按鈕文本的更改使用的是public final void setText (CharSequence text)函數(shù)[5],要注意的是,在AppInventor塊編程環(huán)境中,執(zhí)行該函數(shù)的方法也是通過(guò)JavaReflector組件,如圖3所示。

        圖3 JavaReflector組件執(zhí)行SDK提供的方法

        使用的組件塊是InvokeMethod,第一個(gè)參數(shù)instance實(shí)例即獲取的按鈕的內(nèi)部類android.widget.Button類的實(shí)例,第二個(gè)參數(shù)method就是該對(duì)象要調(diào)用的方法或者函數(shù)的名稱,這里只寫函數(shù)的名字和參數(shù),函數(shù)的()由<>代替,并且參數(shù)只需要指明參數(shù)的類型。第三個(gè)參數(shù)是實(shí)參列表,首先使用創(chuàng)建列表塊準(zhǔn)備創(chuàng)建列表,每個(gè)參數(shù)作為“列表塊”的一個(gè)元素拼接即可。該方法的含義就是更改按鈕顯示的文字,將圖3所示的代碼塊拼接在按鈕1的點(diǎn)擊事件里面,當(dāng)點(diǎn)擊按鈕時(shí)就會(huì)更改其顯示的文本為“Hello”。

        3.2 “不可見組件”的實(shí)現(xiàn)方式

        在AppInventor的塊編程環(huán)境中,有很多組件是“不可見”組件,例如音樂(lè)播放器組件[6],下面以音樂(lè)播放器組件為例說(shuō)明不可見組件調(diào)用SDK中函數(shù)的方式。通過(guò)“輸出調(diào)試信息”塊可以得到“音樂(lè)播放器”組件在AppInventor中的類com.google.appinventor.components.runtime.Player(以下簡(jiǎn)稱Player類)[7],通過(guò)AppInventor的源代碼分析可以得到這個(gè)類的定義中包含了SDK中播放的引擎類android.media.MediaPlayer(以下簡(jiǎn)稱MediaPlayer類),真正實(shí)現(xiàn)歌曲播放暫停等功能的核心類就是android.media.MediaPlayer,所以問(wèn)題的關(guān)鍵在于在AppInventor環(huán)境中獲取不可見組件“音樂(lè)播放器”所對(duì)應(yīng)的android.media.MediaPlayer類的實(shí)例對(duì)象,通過(guò)這個(gè)MediaPlayer類的實(shí)例對(duì)象就可以實(shí)現(xiàn)AppInventor環(huán)境中沒(méi)有實(shí)現(xiàn)的“獲取歌曲時(shí)長(zhǎng)”“播放定位”塊的功能,因?yàn)镻layer類封裝了MediaPlayer類,首先獲取Player類(不包括其父類)的所有字段(類的成員變量),如圖4所示。

        圖4 獲取類的所有字段

        該方法是返回一個(gè)列表,因?yàn)橹魂P(guān)心列表中的MediaPlayer類,所以需要從列表中查找出包含“MediaPlayer”的列表項(xiàng),使用循環(huán)程序?qū)α斜碇械拿總€(gè)項(xiàng)檢索,可獲得MediaPlayer類型的字段,如圖5所示。

        圖5 檢索字段列表中指定類型的字段

        輸出該列表項(xiàng)信息如下:

        private android,media,MediaPlayer com,google,appinventor,components,runtime,Player.I;[8]

        得到了需要的MediaPlayer類的字段。下面就是要獲得這個(gè)字段的實(shí)例(對(duì)象),從輸出信息可以看出AppInventor對(duì)類的變量名稱(類的對(duì)象/實(shí)例)進(jìn)行了加密處理,所以不能直接獲得這個(gè)實(shí)例,還需要通過(guò)JavaReflector技術(shù)來(lái)獲取。JavaReflector組件提供了獲取對(duì)象內(nèi)部字段值的塊,如圖6所示。

        圖6 獲取對(duì)象的字段的值(實(shí)例/對(duì)象)

        運(yùn)行之后輸出信息:android.media.MediaPlayer@2e7129f5[9],說(shuō)明獲取了內(nèi)存中的具體對(duì)象,并且是SDK中的android.media.MediaPlayer類型,說(shuō)明這個(gè)對(duì)象就是App-Inventor環(huán)境中不可見組件“音頻播放器1”所封裝的An-droid SDK中的MediaPlayer實(shí)例。有了這個(gè)對(duì)象之后,App-Inventor中“音頻播放器1”組件未提供的方法,可以通過(guò)MediaPlayer類的實(shí)例調(diào)用其函數(shù)來(lái)實(shí)現(xiàn)。

        3.2.1 獲取歌曲總時(shí)長(zhǎng)

        在Android SDK中通過(guò)調(diào)用MediaPlayer對(duì)象的getDuration()]方法可以獲得當(dāng)前播放歌曲的總時(shí)間長(zhǎng)度,使用剛剛獲得的MediaPlayer實(shí)例來(lái)實(shí)現(xiàn)如圖7所示。

        圖7 JavaReflector執(zhí)行無(wú)參函數(shù)

        圖7中的instance參數(shù)為執(zhí)行函數(shù)的實(shí)例(對(duì)象),就是獲取的MediaPlayer類(已經(jīng)賦值給全局變量),method參數(shù)為執(zhí)行的函數(shù)名稱,因?yàn)樵摵瘮?shù)不需要參數(shù),所以直接給定函數(shù)名稱即可,參數(shù)列表為空列表即可。

        3.2.2 定位播放位置

        定位播放位置的函數(shù)為seekTo(int msec)[10],該函數(shù)接收一個(gè)int類型參數(shù),使用JavaReflector組件的InvokeMethod執(zhí)行該函數(shù)即可,如圖8所示。

        圖8 JavaReflector定位播放位置

        需要強(qiáng)調(diào)的是,參數(shù)的形式為<>,內(nèi)部?jī)H需要放置各形參的類型,使用上類似于Java語(yǔ)言中的泛型,在參數(shù)列表中設(shè)置實(shí)參。

        4 總結(jié)

        AppInventor編程環(huán)境是一種全新的開發(fā)模式,它注重中文思維的編程模式,拋棄了復(fù)雜的編程語(yǔ)言的束縛,讓編程變得自由,但這種環(huán)境在App開發(fā)中還有很多局限性,很多SDK中實(shí)現(xiàn)的功能它無(wú)法實(shí)現(xiàn),為了彌補(bǔ)不足,JavaReflector技術(shù)搭建起了兩者的橋梁,本文詳細(xì)闡述了JavaReflector技術(shù)在AppInventor編程環(huán)境中擴(kuò)展功能的使用方式,從原理上剖析了它在獲得核心類實(shí)例的思路以及JavaReflector執(zhí)行其函數(shù)的方式。

        猜你喜歡
        調(diào)用列表開發(fā)者
        巧用列表來(lái)推理
        學(xué)習(xí)運(yùn)用列表法
        擴(kuò)列吧
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        16%游戲開發(fā)者看好VR
        CHIP新電腦(2016年3期)2016-03-10 13:06:42
        iOS開發(fā)者調(diào)查
        電腦迷(2015年8期)2015-05-30 12:27:10
        iOS開發(fā)者調(diào)查
        電腦迷(2015年4期)2015-05-30 05:24:09
        不含3-圈的1-平面圖的列表邊染色與列表全染色
        精品麻豆国产色欲色欲色欲www| 粉嫩的极品女神尤物在线| 天天干天天日夜夜操| 亚洲一区亚洲二区中文字幕 | 日本不卡在线视频二区三区| 人人妻人人爽人人澡欧美一区| 精品少妇人妻av无码久久| 国产特级全黄一级毛片不卡| 蜜桃视频在线免费观看一区二区| 亚洲天堂线上免费av| 亚洲av精二区三区日韩| 九九久久精品无码专区| 久久精品免费无码区| 一区二区三区不卡免费av| 国产精品一区二区三区四区亚洲 | av无码av天天av天天爽| 亚洲男人天堂2019| 人妻少妇久久精品一区二区 | 中文字幕日本av网站| 人妻精品久久久久中文字幕| 亚洲人成网7777777国产| 日韩高清无码中文字幕综合一二三区 | 国产精品18久久久久网站| 自拍情爱视频在线观看| 亚洲成av人片天堂网无码| 无码午夜人妻一区二区三区不卡视频 | 开心婷婷五月激情综合社区| 爱v天堂在线观看| 国产一区二区黄色网页| 狠狠色婷婷久久一区二区三区| 欧美韩日亚洲影视在线视频| 日本熟女视频一区二区三区| 色婷婷一区二区三区四区成人网| 最近免费中文字幕| 久久精品国产亚洲av麻豆四虎| 天堂麻豆精品在线观看| 精品av熟女一区二区偷窥海滩| 日本理伦片午夜理伦片| 狠狠色狠狠色综合网老熟女| 永久中文字幕av在线免费| а√天堂资源官网在线资源|