999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

JavaReflector技術在AppInventor編程中擴展功能的研究

2024-01-12 04:39:02高占江韓丹
微型電腦應用 2023年12期
關鍵詞:按鈕方法

高占江, 韓丹

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

0 引言

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

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

1 AppInventor開發(fā)模式

當今社會智能終端的應用無處不在,移動智能端操作系統(tǒng)Android占有了市場70%以上的份額是因為Android系統(tǒng)的App的開發(fā)吸引了更多開發(fā)者的眼球。

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

2 AppInventor局限性

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

3 擴展的實現(xiàn)

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

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

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

圖1 更改按鈕文本塊

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

圖2 獲取按鈕的內部實例

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

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

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

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

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

圖4 獲取類的所有字段

該方法是返回一個列表,因為只關心列表中的MediaPlayer類,所以需要從列表中查找出包含“MediaPlayer”的列表項,使用循環(huán)程序對列表中的每個項檢索,可獲得MediaPlayer類型的字段,如圖5所示。

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

輸出該列表項信息如下:

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

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

圖6 獲取對象的字段的值(實例/對象)

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

3.2.1 獲取歌曲總時長

在Android SDK中通過調用MediaPlayer對象的getDuration()]方法可以獲得當前播放歌曲的總時間長度,使用剛剛獲得的MediaPlayer實例來實現(xiàn)如圖7所示。

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

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

3.2.2 定位播放位置

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

圖8 JavaReflector定位播放位置

需要強調的是,參數(shù)的形式為<>,內部僅需要放置各形參的類型,使用上類似于Java語言中的泛型,在參數(shù)列表中設置實參。

4 總結

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

猜你喜歡
按鈕方法
這些按鈕能隨便按嗎?
哪個是門鈴真正的按鈕
當你面前有個按鈕
學習方法
死循環(huán)
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
內心不能碰的按鈕
主站蜘蛛池模板: 国产精品吹潮在线观看中文| 成人va亚洲va欧美天堂| 99热这里只有精品在线播放| 国产福利一区视频| 久久国产精品嫖妓| 精品国产电影久久九九| 亚洲中文字幕精品| 91热爆在线| 免费99精品国产自在现线| 国内精自线i品一区202| 亚洲黄色视频在线观看一区| 国产91丝袜在线播放动漫 | 色网站在线免费观看| 国产亚洲精品97在线观看| 久久国产香蕉| 精品国产aⅴ一区二区三区| 成人精品视频一区二区在线| 国产精品99一区不卡| 欧美专区在线观看| 久久国产亚洲偷自| 久久人人97超碰人人澡爱香蕉| 97精品国产高清久久久久蜜芽| 欧美日本在线| 久久综合成人| 2019年国产精品自拍不卡| 国产精品护士| 国产尹人香蕉综合在线电影| 国产情精品嫩草影院88av| 免费观看三级毛片| 国产精品国产主播在线观看| 99视频在线精品免费观看6| 日韩一级二级三级| 国产一区二区三区在线精品专区| 亚洲色图欧美视频| 亚洲动漫h| 久久人妻xunleige无码| 午夜国产精品视频| 五月天久久婷婷| 国产成人久视频免费| 久久久久夜色精品波多野结衣 | 久久久久人妻精品一区三寸蜜桃| 精品夜恋影院亚洲欧洲| 无码一区中文字幕| 精品视频在线观看你懂的一区| 三级国产在线观看| 欧美啪啪一区| 天天综合色天天综合网| 久久久久九九精品影院| 18禁高潮出水呻吟娇喘蜜芽| 日本欧美视频在线观看| 波多野结衣视频网站| 国产精品冒白浆免费视频| 久久国产精品国产自线拍| 99久久精品国产精品亚洲 | 91成人在线观看视频| 欧美a在线看| 国产色图在线观看| 国产精品一线天| 精品国产污污免费网站| 亚洲第一香蕉视频| 亚洲an第二区国产精品| 久996视频精品免费观看| 国产在线八区| 波多野结衣国产精品| 日本高清成本人视频一区| 色九九视频| 国产视频a| 欧美日一级片| 爆乳熟妇一区二区三区| 女人毛片a级大学毛片免费| 成人国产小视频| 日本不卡在线| 国产无码网站在线观看| 国产精品主播| 久久这里只有精品国产99| 亚洲乱强伦| 亚洲国产清纯| 亚洲中久无码永久在线观看软件| 国产毛片不卡| 国产日韩欧美精品区性色| a亚洲视频| 精品久久久久久中文字幕女|