專利名稱:用于向軟件應(yīng)用程序動態(tài)地添加特征的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及向設(shè)備添加軟件應(yīng)用程序特征。
背景技術(shù):
允許終端制造商創(chuàng)造應(yīng)用程序驅(qū)動的電話機(jī)的終端軟件產(chǎn)品是可獲得的。可從芬蘭諾基亞公司獲得的60系列平臺是一種能夠被終端制造商許可的終端軟件產(chǎn)品的例子。
期望使用終端軟件產(chǎn)品制造電話機(jī)(或其它相似設(shè)備)的制造商將各種相關(guān)的應(yīng)用程序包括到終端軟件產(chǎn)品。制造商也能夠包括已經(jīng)由制造商定制的用戶界面(UI)元件,以及添加新的應(yīng)用程序或刪除舊的應(yīng)用程序。另外,購買這種電話機(jī)的用戶可以在該電話機(jī)上安裝第三方軟件。
典型地,應(yīng)用程序為在預(yù)定義外殼應(yīng)用程序中對于終端用戶而言可見的一個特征提供功能。應(yīng)用程序菜單以及其它用戶界面元件、例如軟鍵按扭或者選擇列表提供了每一特征可用的多組選擇或數(shù)據(jù)。然而,制造商、終端用戶以及第三方開發(fā)商并不能按照對于無縫終端用戶經(jīng)歷來說看起來象是集成的方式用他們自己的特征容易地擴(kuò)展終端軟件產(chǎn)品應(yīng)用程序。特征特定的菜單項(或者其它用戶界面元件)不能看起來和工作起來好像它們就是終端軟件產(chǎn)品應(yīng)用程序的一部分。按照慣例,在電話機(jī)中增加新的特征意味著增加新的應(yīng)用程序,這通常將導(dǎo)致許多執(zhí)行同類事務(wù)并且不一定彼此一致的應(yīng)用程序。
試圖解決這些問題的現(xiàn)有嘗試都已經(jīng)失敗了。例如,現(xiàn)有嘗試包括為每個特征實(shí)現(xiàn)應(yīng)用編程接口(API)。在這樣的系統(tǒng)中,為每個特征指定一個API。向需要這些特征的客戶端應(yīng)用程序提供對對應(yīng)于該特征的API的依賴性。向客戶端添加特征特定的UI元件。另外,能夠添加特征特定的UI元件。解決上述問題的另一嘗試包括預(yù)先添加特征特定的UI元件以及使用該等元件的運(yùn)行時間變體。這樣的系統(tǒng)預(yù)先包含所有特征,并且取決于產(chǎn)品配置對特征進(jìn)行激活/去激活。
然而,這些技術(shù)通常導(dǎo)致了軟件結(jié)構(gòu)中的靜態(tài)依賴性,會產(chǎn)生電話機(jī)開發(fā)程序中的集成問題。
在任何軟件開發(fā)(包括用于諸如上述那些終端軟件產(chǎn)品之類的終端軟件產(chǎn)品的編程)中,開發(fā)者創(chuàng)建軟件結(jié)構(gòu),將需求映射到子系統(tǒng)和部件,并且定義對于所創(chuàng)建的結(jié)構(gòu)的功能性及非功能性軟件需求。這些結(jié)構(gòu)的關(guān)鍵部件是應(yīng)用編程接口(API),它表示被稱為調(diào)用程度的另一部件經(jīng)由其利用或者調(diào)用另一被稱為被調(diào)用程序的部件的接口。
為了向現(xiàn)有軟件中添加一個功能,將一個新的部件通過被調(diào)用程序為其它方使用而提供的API集成到現(xiàn)有應(yīng)用程序中。通常,API包括多組聲明和定義,例如,常量聲明、類型定義、類定義以及函數(shù)(過程)定義。每個函數(shù)定義有一個唯一的簽名,它包括返回類型、函數(shù)名稱以及函數(shù)變元列表。每個變元定義一段傳遞給函數(shù)或程序的數(shù)據(jù)。變元能夠保持的數(shù)據(jù)類型可以是簡單的,例如字符串、字節(jié)、整數(shù)、實(shí)數(shù)、雙精度,或者可以是對結(jié)構(gòu)或類定義的結(jié)構(gòu)引用。
在軟件開發(fā)中需要有標(biāo)準(zhǔn)的多用途API,它們在軟件演變中是保持不改變的和足夠通用的。開發(fā)者想把采用簡單數(shù)據(jù)類型的通用的多用途函數(shù)、例如Int genericDoSomething(const char[]objectInformation)實(shí)現(xiàn)到這樣的API中。然而,實(shí)現(xiàn)能夠接受多種參數(shù)的通用函數(shù)是困難的。該函數(shù)可以被分成具有獨(dú)立變體的幾段。例如,函數(shù)可以被定義如下1)Int genericDoSomething(const char[]objectName);2)Int genericDo Something(const char[]objectId);2B)Int genericDoSomethingByName(const char[]objectName);2C)Int genericDoSomethingById(const char[]objectId);3)Int genericDoSomething(const char[]objectName,const char[]objectUrl);4)Int genericDoSomething(const char[]objectName,const char[]objectID,char*objectUrl);5)Int genericDoSomething(const char[]objectName,char[]outObjectInfo);在所有這些版本中,被調(diào)用程序假定每個變元位置的含義或者語義。然而,該被調(diào)用程序必須信任調(diào)用程度,并且假定第一次輸入的參數(shù)是正確的,被調(diào)用程序沒有好的辦法對之進(jìn)行驗證。上述選擇1)和2)是不可能的,因為函數(shù)簽名不是唯一的,并且編譯器不能分辯函數(shù)調(diào)用。需要上述函數(shù)2B)和2C)來分辯函數(shù)調(diào)用。
當(dāng)被調(diào)用程序把一個輸入?yún)?shù)傳遞到其它函數(shù)時,它向前傳送這種信任。在許多層函數(shù)調(diào)用之后,語義可能丟失,并且有變元被誤解的風(fēng)險。
如果向函數(shù)增加一個新的變元,則每次必須改變函數(shù)的簽名。粗心的改變可能導(dǎo)致二進(jìn)制或源兼容性破壞。例如,在上述3)和4)的情況中,增加了額外的objectID和objectUrl變元。在5)的情況中,如果被調(diào)用程序在輸出變元outObjectInfo中返回數(shù)據(jù),則調(diào)用程度將會面臨和輸入?yún)?shù)類似的問題。如果將輸入變元持續(xù)地保存到一個文件中,則丟失變元的含義。如果將輸入變元傳遞過進(jìn)程邊界,則丟失了變元的含義。
如上所述,使用特定的函數(shù)變體代替通用形式是可能的。能夠向變元、例如“Int genericDoSomething(int objectInfoMeaning,const char[]objectInformation)”中添加語義信息。這適用于在同一次調(diào)用中傳遞的每個額外的變元(例如,“Int genericDoSomething(intobjectInfoMeaning1,const char[]objectInformation1,intobjectInfoMeaning2,const char[]objectInformation2);”。能夠?qū)ι鲜鼋Y(jié)構(gòu)進(jìn)行簡化(例如,“Int genericDoSomething(struct ObjectInfo1 info,struct ObjectInfo2 info)”)。這里,“struct ObjectInfo1”結(jié)構(gòu)把信息保持作為成員數(shù)據(jù)。在這樣的結(jié)構(gòu)中,編譯器檢查變元的語義。
作為選擇,能夠使用類(例如,“Int genericDoSomething(ObjectInfo1 info,ObjectInfo2 info);”),其中Object1和Object2是自動保持語義信息的C++類。同樣地,編譯器檢查變元的語義。然而,需要以類似的方式添加新的變元。另外,能夠?qū)enericDoSomething方法作為一個成員函數(shù)添加到Object1類中,以便獲得object1.genericDo Something(Object2 &info)。
另一種已知技術(shù)(例如在Microsoft OLE2中)是使用能夠保持幾種數(shù)據(jù)表示的變體數(shù)據(jù)類型(參見下一部分)。但是這些已知技術(shù)仍然缺少語義信息。
為了通過相同的使用者(consumer)API把參數(shù)從一個使用者傳遞到一個或多個匹配的提供者,可以創(chuàng)建一個帶有語義和數(shù)據(jù)信息的通用參數(shù)。例如,每個使用者然后可以檢查語義含義以及數(shù)據(jù)類型,并且如果需要就可以進(jìn)行必需的轉(zhuǎn)換。參數(shù)應(yīng)當(dāng)是通用的,這是因為難以知道通過API傳遞何類數(shù)據(jù)。
因此,需要提供一種用于以受控的和動態(tài)的方式將特征添加到現(xiàn)有的一組應(yīng)用程序中的機(jī)制。此外,甚至需要向現(xiàn)有的應(yīng)用程序中添加特征以擴(kuò)展終端軟件產(chǎn)品應(yīng)用程序的功能,另外,還需要有通用的函數(shù)變元。
發(fā)明內(nèi)容
本發(fā)明針對向軟件應(yīng)用程序動態(tài)添加特征的方法、設(shè)備、系統(tǒng)以及計算機(jī)程序。這些功能是使用一種用于向任意應(yīng)用程序添加任意特征的一般不可改變的應(yīng)用編程接口(API)的框架來添加的。
簡而言之,一個示范性實(shí)施例涉及這樣一種方法,它通過建立一個用于向任意應(yīng)用程序添加任意特征的一般不可改變的應(yīng)用編程接口(API)的框架,向軟件應(yīng)用程序動態(tài)地添加計算機(jī)軟件特征。該方法包括為一個指定預(yù)期用戶界面元件的使用者應(yīng)用程序提供使用者應(yīng)用程序興趣(interest)資源;將與使用者應(yīng)用程序興趣資源相對應(yīng)的預(yù)期用戶界面元件存儲到一個文件中;將預(yù)期用戶界面元件傳遞給一個應(yīng)用程序互配(interworking)框架;將預(yù)期用戶界面元件添加到與軟件應(yīng)用程序相關(guān)聯(lián)的用戶界面中。
另一個示范性實(shí)施例涉及這樣一種設(shè)備,它向軟件應(yīng)用程序動態(tài)地添加特征,以便能夠?qū)⒂梢粋€軟件程序提供的任何特征添加到用于該設(shè)備的軟件平臺程序中。該設(shè)備包括一個新的使用者應(yīng)用程序,它公布指示該新的使用者應(yīng)用程序期望具有何特征的特征興趣。該新的使用者應(yīng)用程序基于特征興趣為所需的用戶界面特征提供具有興趣占位符的用戶界面資源。該設(shè)備還包括多個具有特征和可用于特征的用戶界面資源的提供者應(yīng)用程序;以及一個應(yīng)用程序互配框架,它為該新使用者應(yīng)用程序和多個提供者應(yīng)用程序提供一個接口,以便使特征興趣與可從多個提供者應(yīng)用程序中獲得的特征之一相匹配。將與匹配的特征相對應(yīng)的用戶界面元件從多個提供者應(yīng)用程序之一中添加到新使用者應(yīng)用程序中。
另一個示范性實(shí)施例涉及一種用于向軟件應(yīng)用程序動態(tài)地添加特征的系統(tǒng)。該系統(tǒng)包括一個使用者應(yīng)用程序,它公布特征興趣,并且基于特征興趣標(biāo)識需要的用戶界面資源;一個提供者應(yīng)用程序,它公布提供者性能,并且標(biāo)識對于一個特征可用的用戶界面資源;以及一個應(yīng)用程序互配框架,它為使用者應(yīng)用程序以及提供者應(yīng)用程序提供一個接口,以便使特征興趣和提供者性能相匹配,并且將用戶界面元件從提供者應(yīng)用程序中添加到使用者應(yīng)用程序中。
另一示范性實(shí)施例涉及一種計算機(jī)程序產(chǎn)品,它具有用以實(shí)現(xiàn)以下功能的計算機(jī)代碼為指定預(yù)期用戶界面元件的使用者應(yīng)用程序提供使用者應(yīng)用程序興趣資源;將與使用者應(yīng)用程序興趣資源相對應(yīng)的預(yù)期用戶界面元件存儲到一個文件中;將預(yù)期用戶界面元件傳遞到一個應(yīng)用程序互配框架;向用戶界面添加預(yù)期用戶界面元件。
對于本領(lǐng)域技術(shù)人員來說,通過閱讀下面的附圖、說細(xì)說明以及附加權(quán)利要求書,本發(fā)明的其它主要特性和優(yōu)點(diǎn)將變得明顯。
下面將參照附圖對示范性實(shí)施例加以說明。
圖1是依據(jù)一個示范性實(shí)施例用于向軟件應(yīng)用程序動態(tài)地添加特征的軟件結(jié)構(gòu)的圖形表示。
圖2是依據(jù)一個示范性實(shí)施例的用戶界面示例的圖形表示。
圖3是描述了依據(jù)一個示范性實(shí)施例用于向軟件應(yīng)用程序動態(tài)地添加特征的過程中的操作的流程圖。
圖4是依據(jù)一個示范性實(shí)施例的通用參數(shù)實(shí)現(xiàn)的圖形表示。
圖5是依據(jù)一個示范性實(shí)施例的設(shè)備的方框圖。
具體實(shí)施例方式
圖1表示向軟件應(yīng)用程序動態(tài)地添加特征的軟件結(jié)構(gòu)。使用者應(yīng)用程序12通過公布使用者興趣16指示可從特征提供者14獲得的、使用者應(yīng)用程序12感興趣的特征。使用者應(yīng)用程序在使用者UI資源文件18中指定用戶界面(UI)元件模板,并且特征提供者14在運(yùn)行時把預(yù)期的UI元件添加到UI中。
在存在能夠滿足使用者應(yīng)用程序12的公布興趣的特征提供者14的情況下,特征提供者14在運(yùn)行時將UI元件添加到UI中。此外,特征提供者14處理相關(guān)的業(yè)務(wù)邏輯。
以相同的特定格式表示使用者興趣16和特征提供者14公布的提供者性能20。在一個示范性實(shí)施例中,這種格式包括多用途互聯(lián)網(wǎng)郵件擴(kuò)展(MIME)或互聯(lián)網(wǎng)數(shù)據(jù)、命令以及提供者接口。使用者興趣16和提供者性能20能夠包括為特征提供者14考慮了更靈活的解決方案的通配符模式。
在使用者應(yīng)用程序12和特征提供者14之間的數(shù)據(jù)協(xié)議允許將參數(shù)從使用者傳遞到提供者和從提供者提供給使用者。數(shù)據(jù)協(xié)議可以是靜態(tài)的,也可以在運(yùn)行時進(jìn)行協(xié)商。一個使用者應(yīng)用程序12可以使用許多特征提供者,并且一個特征提供者14可以滿足許多使用者的興趣。特征提供者14也可以是其他提供者的使用者。使用者應(yīng)用程序12和特征提供者14彼此之間是盡可能獨(dú)立的。特征提供者14可以僅從只讀存儲器(ROM)中或者從用戶數(shù)據(jù)區(qū)域(可安裝的提供者)加載。
舉例來說,下面表1所示的情況是使用參照圖1描述的軟件結(jié)構(gòu)的例子。每個例子都有一個應(yīng)用程序、一個使用者、一個興趣以及一個提供者。
表1
因此,如表1所示,應(yīng)用程序“編輯圖像”具有使用者應(yīng)用程序“圖像瀏覽器”和“媒體畫廊”。此外,相應(yīng)的使用者興趣是“編輯命令”和MIME類型,并且相應(yīng)的提供者是“圖像娛樂(Image Fun)”。圖2表示在編輯圖像應(yīng)用程序的情況中的用戶界面。在用戶界面34中,將新的圖像娛樂特征36添加到用戶界面32中的現(xiàn)有應(yīng)用程序菜單中。以無縫的方式實(shí)現(xiàn)新特征36的添加。因此,對于用戶而言,看上去該新特征正如圖像瀏覽器應(yīng)用程序的另一個特征一樣。
再次參見圖1,使用者應(yīng)用程序12在使用者UI資源文件18中有一個標(biāo)準(zhǔn)UI元件。使用者UI資源文件18可以包括使用者興趣。另外,獨(dú)立的資源文件被用來創(chuàng)建共同興趣的集合或共同興趣“庫”。能夠?qū)⑵谕呐d趣(例如,菜單命令、設(shè)置頁面)插入到使用者UI資源文件18中的期望的UI元件中。
應(yīng)用程序互配框架(AIWFW)22確保特征提供者14能夠只在UI設(shè)計者定義UI元件的位置添加UI元件24。AIWFW 22在使用者應(yīng)用程序12和特征提供者14之間建立連接。AIWFW 22通過使公布的使用者興趣16和公布的提供者性能20相匹配來實(shí)現(xiàn)這一連接。這些連接可以是從使用者應(yīng)用程序12對動態(tài)加載的提供者動態(tài)鏈接庫(DLL)的純動態(tài)鏈接庫函數(shù)調(diào)用,或者它們能夠具有從使用者進(jìn)程到提供者進(jìn)程的進(jìn)程間通信(IPC)連接。在一個示范性實(shí)施例中,動態(tài)加載的DLL被用來避免進(jìn)程間的過多的內(nèi)容切換。
AIWFW 22實(shí)現(xiàn)兩個API一個便于使用者使用提供者的使用者API 26和一組實(shí)現(xiàn)提供者的提供者API 28。特征提供者14可以僅實(shí)現(xiàn)與其UI性能相匹配的API,例如基本接口、菜單服務(wù)接口、設(shè)置接口等。這組接口設(shè)置可以根據(jù)需要進(jìn)行擴(kuò)展。
在運(yùn)行時,向AIWFW 22提供興趣。基于數(shù)據(jù)協(xié)議,如果可行,則使用者應(yīng)用程序12向特征提供者14提供可選的輸入?yún)?shù),并且希望返回輸出參數(shù)。在大部分情況下輸入?yún)?shù)和輸出參數(shù)的默認(rèn)格式便已足夠。
每個特征提供者14實(shí)現(xiàn)提供者API 28的所支持的接口。AIWFW22為每個接口提供默認(rèn)的實(shí)現(xiàn)方式。特征提供者14的第一個任務(wù)是把所需特征的UI元件、利如菜單項從一個提供者資源文件(PUI)30傳遞給使用者應(yīng)用程序12中。第二個任務(wù)是處理與添加的元件相關(guān)的命令,這些指令以集成的方式出現(xiàn)在使用者資源文件18和本地使用者項目中。第三個任務(wù)是滿足數(shù)據(jù)協(xié)議、利如默認(rèn)協(xié)議。
特征提供者14使用任何現(xiàn)有的操作系統(tǒng)API、UI工具等以有助于實(shí)現(xiàn)。AIWFW 22有助于容易地實(shí)現(xiàn)特征提供者,以便以特征提供者的形式完成現(xiàn)有的經(jīng)過測試的軟件。從安全性角度來說,可以支持“僅僅從只讀存儲器中加載(Load-only-from-ROM)”以將主要提供者限制為不可從用戶數(shù)據(jù)區(qū)域中修補(bǔ)。
圖3表示在向軟件應(yīng)用程序進(jìn)程動態(tài)添加特征的示范性操作。取決于該實(shí)施例,可以執(zhí)行額外的、較少的或者不同的操作。在操作40中,為一個使用者添加一個興趣資源。興趣資源描述了使用者應(yīng)用程序期望何特征。
在操作42中,將興趣中的用戶界面(UI)元件提供給一個資源文件。菜單命令和設(shè)置頁面是由資源文件的內(nèi)容所規(guī)定的UI元件的例子。在操作44中,使用者應(yīng)用編程接口(API)向AIWFW提供使用者興趣。AIWFW是使用者和特征提供者之間的接口。在操作46中,特征提供者在運(yùn)行時將需要的興趣UI元件從AIWFW中添加到使用者應(yīng)用程序UI中。
參照圖1至圖3描述的示范實(shí)施例在已經(jīng)將電話機(jī)投放到市場中之后以集成的方式擴(kuò)展應(yīng)用程序。能夠維持本地平臺應(yīng)用程序的UI一致性,同時規(guī)定可以進(jìn)行UI元件添加的位置。整個平臺變得更加有趣并且是可定制的。
因此,能夠支持平臺配置,同時基于特征提供者創(chuàng)建不同的銷售組合。同時,本地應(yīng)用程序可以接受以后由運(yùn)營商或第三方開發(fā)商實(shí)現(xiàn)的提供者。
從軟件結(jié)構(gòu)的角度來講,可以看到許多優(yōu)點(diǎn)。例如,特征的維護(hù)和擴(kuò)展更加容易。可以定制一個特征提供者,而且它以類似的方式影響所有感興趣的使用者。因此,降低了開發(fā)成本。而且,結(jié)構(gòu)上的靜態(tài)依賴性能夠被替換為動態(tài)依賴性。這使軟件配置更加容易,例如,實(shí)現(xiàn)共同的內(nèi)核映象和變化的映象概念。另外,由于基于特征的集成增加模型,示范性實(shí)施例允許用于電話機(jī)開發(fā)的更容易的設(shè)備集成。這應(yīng)當(dāng)節(jié)約集成負(fù)擔(dān)和成本。此外,甚至能夠在不改變使用者應(yīng)用程序(編輯其代碼)的情況下將新的特征添加到使用者應(yīng)用程序中。這極大地減少了所需的測試工作。AIWFW實(shí)現(xiàn)了具有很多好的屬性的面向?qū)ο蟮能浖O(shè)計的打開/關(guān)閉原理。
利用示范性實(shí)施例,特征改變更加容易。制造商可以把需要的提供者選擇到ROM中,并且使用者UI中的可見性/非可見性是一致的。此外,運(yùn)營商和第三方開發(fā)者能夠在以后增加他們自已的提供者,但是電話機(jī)制造商可以控制進(jìn)行添加的位置。
圖4表示依據(jù)一個示范性實(shí)施例的通用參數(shù)實(shí)現(xiàn)。在這個實(shí)現(xiàn)中,一個稱為SemanticID的變量用來描述由用例需要的數(shù)據(jù),例如FILENAME、URL、MESSAGEID、CONTACTID、IMAGEFILE、IMAGEDATA和IMAGEHANDLE。ID具有唯一的值??梢詫⒚芮邢嚓P(guān)的SemanticID集合在一起以形成備選表示組。例如,可以將上述的IMAGEFILE、IMAGEBUFFER、IMAGEDBHANDLE集合在一起以形成IMAGE。
一個稱為VariantTypeId的變量用來表示基本數(shù)據(jù)類型,例如整數(shù)、日期/時間、唯一ID、字符串、實(shí)數(shù),雙精度和數(shù)據(jù)緩沖。TVariant可以保持所有由VariantTypeId指定的數(shù)據(jù)類型。一個通用參數(shù)GenericParam擁有下列數(shù)據(jù)屬性SemanticID、TVariant、SemanticIDGroup、ParameterStatus(它保持用于數(shù)據(jù)檢查的狀態(tài)代碼)、以及其它用于該通用參數(shù)的工具(utility)成員、例如初始者應(yīng)用程序UID、版本信息以及錯誤代碼??梢园ㄓ糜贕enericParam的外部和內(nèi)部支持,以向流中進(jìn)行寫入,以及從流中構(gòu)造其自身。流可以表示任何操作系統(tǒng)流(存儲器、文件、套接字(socket)、串行端口、IPC通道等),它能夠是在移動設(shè)備內(nèi)部或移動設(shè)備之間所用的通信興趣。
定義了被稱為GenericParamList的通用參數(shù)列表,它具有一個或更多GeneicParams。能夠包括用于GenericParamList的外部和內(nèi)部支持以向流中進(jìn)行寫入,以及從流中構(gòu)造其自身。能夠在每一個需要一致方式的函數(shù)中使用GenericParamList以傳遞變元Int genericDoSomething(GenericParamList inParams);Int genericDoSomething(GenericParamList inParams,GenericParamList outParams)舉例來說,能夠使用通用參數(shù)實(shí)現(xiàn)以在使用應(yīng)用程序嵌入(進(jìn)程內(nèi)通信)的終端軟件產(chǎn)品應(yīng)用程序之間傳遞輸入和輸出變元。因此,不管調(diào)用堆棧有多深都可以理解參數(shù)的含義(語義)。該實(shí)現(xiàn)還能夠在獨(dú)立的終端軟件產(chǎn)品應(yīng)用程序之間傳遞輸入和輸出變元(進(jìn)程到進(jìn)程的通信)。因此,保留了變元的語義和來源。
此外,該通用參數(shù)實(shí)現(xiàn)能夠在以上參照圖1至圖3所述的應(yīng)用程序互配框架22內(nèi)部傳遞變元。AIWFW 22可以利用通用參數(shù)來實(shí)現(xiàn)數(shù)據(jù)靈活的協(xié)議。例如,一條服務(wù)提供者命令可以執(zhí)行如下void ExecuteServiceCmdL(const TInt aCmdId,const GenericParamList aInParamList,GenericParamList aOutParamList);作為另一個例子,能夠?qū)⒃撏ㄓ脜?shù)實(shí)現(xiàn)用于語義相同數(shù)據(jù)的備選表示。例如,圖像容器可以是文件、圖像數(shù)據(jù)庫的標(biāo)識符、或者作為存儲器緩存的圖像數(shù)據(jù)。
下面參照圖4,CGenericParamList類52包含多個(0..N)CGenericParam項54。每個CGenericParam項54包含TGenericParamID和TVariant,它們是CGenericParam類的一部分。CGenericParam類具有一個TVariantTypeID數(shù)據(jù)類型類和包含在一個TVariant類56中的多個數(shù)據(jù)值。CGenericParamList類52和CGenericParam類向包含在操作系統(tǒng)中的一個流58進(jìn)行寫入。應(yīng)用程序60使用數(shù)據(jù)工具(Utility)API 62創(chuàng)建CGenericParamList類52,在創(chuàng)建過程中數(shù)據(jù)工具API 62和數(shù)據(jù)工具64進(jìn)行對接。
在創(chuàng)建CGenericParamList類52的示范性實(shí)施例中,定義了各種類,并且分配了標(biāo)識符。例如,定義稱為TGenericParamId的類以表示SemanticID。為這個類中使用的標(biāo)識符分配適當(dāng)?shù)姆秶?,并且使其是唯一的。定義稱為TVariantTypeId的類以表示TVariantTypeId。為這個類中使用的標(biāo)識符分配適當(dāng)?shù)闹担⑶沂蛊涫俏ㄒ坏?。也為操作系統(tǒng)類型定義變量,例如TInt32、TUid、TTime、TDesC和HBufC。定義稱為TVariant的類,它具有TVariantTypeId和以上述格式的實(shí)際數(shù)據(jù)。此外,將額外的工具屬性定義為成員方法或CGenericParamList成員。
定義稱為CGenericParam的類,它具有TGenericParamId數(shù)據(jù)成員(iSemanticId)、TVariant數(shù)據(jù)成員(iValue)和用于擴(kuò)展的保留成員。為CGenericParam類提供外部方法和內(nèi)部方法,以將其自身寫入一個流中并且從流中構(gòu)造其自身。為GenericParamList定義CGenericParamList類。也向列表類提供外部和內(nèi)部支持。提供基本的迭代程序用于列出和訪問CGenericParamList類。為這些類提供一個模塊測試程序。
在備選實(shí)施例中,為CgenericParamList類提供了高級迭代方法以通過TGenericParamId和TVariantTypeId搜索列表。列表然后可以包含同一參數(shù)的備選表示。此外,能夠?qū)⒄Z義標(biāo)識符組實(shí)現(xiàn)作為TGenericParamIds的范圍??梢允褂棉D(zhuǎn)換工具對語義標(biāo)識符進(jìn)行轉(zhuǎn)換。
通用參數(shù)實(shí)現(xiàn)的示范性實(shí)施例使得能夠創(chuàng)建通用服務(wù)API,它們允許處理幾種變元而不需要改變函數(shù)簽名。該實(shí)施例還允許在進(jìn)程邊界內(nèi)部和外部在調(diào)用堆棧內(nèi)進(jìn)行與變元檢查有關(guān)的語義檢查。API的框架類型可以基于語義ID進(jìn)行一致性、安全性等檢查,或者甚至用另一個更適合的語義ID代替一個語義ID。
檢查可以由SemanticID組成,并且如果需要,則可以將一個語義標(biāo)識符轉(zhuǎn)換成為另一個語義標(biāo)識符。如果RAM消耗不成問題的話,則調(diào)用程序可以接受/創(chuàng)建用于相同數(shù)據(jù)的幾個備選語義ID(例如IMAGEFILE、IMAGEDATA、IMAGEHANDLE)。變元可以基于額外的工具數(shù)據(jù)保持上下文信息。
如果使用輸入/輸出變元,則能夠?qū)GenericParamList用作元數(shù)據(jù)以描述由被調(diào)用程序要求的數(shù)據(jù)協(xié)議。調(diào)用程序填入數(shù)據(jù)的TVariant部分作為實(shí)際的輸入?yún)?shù)??梢詫GenericParamList保存到任何一種流中,并且它仍然保持語義有效。通用參數(shù)實(shí)現(xiàn)通過增加新的語義標(biāo)識符、以及利用早先的實(shí)現(xiàn)保持二進(jìn)制和數(shù)據(jù)性能,擴(kuò)展了現(xiàn)有的API。
圖5表示一個設(shè)備70,它具有中央處理單元(CPU)72、輸入74、輸出76、存儲器78以及用戶界面(UI)79。能夠依據(jù)參照圖1至圖4所描述的示范性實(shí)施例利用新的特征對UI 79進(jìn)行配置。CPU 72處理包含在應(yīng)用程序互配框架中的指令,以便將使用者應(yīng)用程序和提供者應(yīng)用程序進(jìn)行對接。設(shè)備70可以是電話機(jī)、是個人數(shù)字助理(PDA)、計算機(jī)或者其它任何設(shè)備。
該詳細(xì)說明概括了用于向軟件應(yīng)用程序動態(tài)地添加特征的方法、設(shè)備、系統(tǒng)以及計算機(jī)程序產(chǎn)品。在上述說明中,為了解釋的目的,闡述了大量的具體細(xì)節(jié)以便提供對本發(fā)明的深入理解。然而,對于本領(lǐng)域技術(shù)人員來說,很明顯沒有這些具體細(xì)節(jié)也可以實(shí)行這些示范性實(shí)施例。在其它情況下,為了便于對示范性實(shí)施例進(jìn)行說明,以方框圖的形式顯示結(jié)構(gòu)和設(shè)備。
雖然圖中所示和以上所述的示范性實(shí)施例是當(dāng)前優(yōu)選的,但是應(yīng)當(dāng)認(rèn)識到僅僅通過舉例提供了這些實(shí)施例。例如,其它實(shí)施例可能包括用于執(zhí)行相同操作的不同技術(shù)。本發(fā)明不局限于特定的實(shí)施例,而是可以擴(kuò)展到落在所附權(quán)利要求書的范圍和實(shí)質(zhì)當(dāng)中的各種修改、組合和置換。
權(quán)利要求
1.一種用于通過建立一個用于向應(yīng)用程序添加特征的應(yīng)用編程接口的框架來向軟件應(yīng)用程序動態(tài)地添加計算機(jī)軟件特征的方法,所述方法包括從應(yīng)用程序互配框架請求一個與使用者應(yīng)用程序的使用者興趣相匹配的特征;使用所述使用者興趣和一個特征性能來標(biāo)識一個提供者;如果標(biāo)識了所述提供者,則向所述使用者應(yīng)用程序提供所述特征;以及在所述使用者應(yīng)用程序中應(yīng)用所述特征。
2.如權(quán)利要求1所述的方法,進(jìn)一步包括在應(yīng)用程序互配框架應(yīng)用編程接口中使用通用參數(shù)。
3.如權(quán)利要求1所述的方法,其特征在于所述應(yīng)用程序互配框架將所述使用者應(yīng)用程序和所述特征提供者進(jìn)行對接。
4.如權(quán)利要求3所述的方法,其特征在于所述應(yīng)用程序互配框架使用動態(tài)鏈接庫函數(shù)調(diào)用將所述使用者應(yīng)用程序和所述特征提供者進(jìn)行對接。
5.如權(quán)利要求1所述的方法,進(jìn)一步包括和所述特征一起添加一個特征用戶界面元件。
6.如權(quán)利要求5所述的方法,其特征在于所述特征用戶界面元件包括菜單命令和設(shè)置頁面或者其它用戶界面元件。
7.如權(quán)利要求5所述的方法,其特征在于所述應(yīng)用程序互配框架實(shí)現(xiàn)兩個應(yīng)用編程接口,包括一個使用者應(yīng)用編程接口和一組提供者應(yīng)用編程接口,其中所述提供者應(yīng)用編程接口和所述預(yù)期用戶界面元件相匹配。
8.一種設(shè)備,用于向軟件應(yīng)用程序動態(tài)地添加特征以便能夠?qū)⒂绍浖绦蛱峁┑奶卣魈砑拥接糜谒鲈O(shè)備的軟件平臺程序中,所述設(shè)備包括使用者應(yīng)用程序,它公布表示所述使用者應(yīng)用程序希望具有何特征的特征興趣;至少一個提供者應(yīng)用程序,它具有至少一個可用的特征;以及應(yīng)用程序互配框架,它為所述使用者應(yīng)用程序和所述提供者應(yīng)用程序提供一個接口,以便使所述特征興趣和可從所述提供者應(yīng)用程序中獲得的特征之一相匹配。
9.如權(quán)利要求8所述的設(shè)備,其特征在于新的所述使用者應(yīng)用程序是由終端制造商提供的應(yīng)用程序。
10.權(quán)利要求8所述的設(shè)備,其特征在于新的所述使用者應(yīng)用程序是由第三方提供給所述設(shè)備的用戶的應(yīng)用程序。
11.如權(quán)利要求8所述的設(shè)備,其特征在于新的所述使用者應(yīng)用程序集成到所述設(shè)備當(dāng)中,好像是用于所述設(shè)備的原始組軟件應(yīng)用程序的一部分。
12.如權(quán)利要求8所述的設(shè)備,其特征在于在應(yīng)用程序互配框架應(yīng)用編程接口中使用通用參數(shù)。
13.如權(quán)利要求8所述的設(shè)備,其特征在于新的所述使用者應(yīng)用程序中的特征興趣包括在將所述新的使用者應(yīng)用程序引入到所述設(shè)備中之前在所述設(shè)備上不存在的菜單選項。
14.如權(quán)利要求8所述的設(shè)備,其特征在于將與所述匹配的特征相對應(yīng)的用戶界面元件放置在興趣占位符中。
15.如權(quán)利要求8所述的設(shè)備,其特征在于所述使用者應(yīng)用程序是一個新的使用者應(yīng)用程序。
16.如權(quán)利要求8所述的設(shè)備,其特征在于所述至少一個可用的特征是基于特征興趣的用戶界面特征。
17.一種用于向軟件應(yīng)用程序動態(tài)地添加特征的系統(tǒng),所述系統(tǒng)包括使用者應(yīng)用程序,它公布特征興趣,并且基于所述特征興趣標(biāo)識用戶界面資源;提供者應(yīng)用程序,它公布提供者性能,并且標(biāo)識對于一個特征可用的用戶界面資源;和應(yīng)用程序互配框架,為所述使用者應(yīng)用程序和所述提供者應(yīng)用程序提供一個接口,以便使所述特征興趣和所述提供者性能相匹配,并且將用戶界面元件從所述提供者應(yīng)用程序中添加到所述使用者應(yīng)用程序中。
18.如權(quán)利要求17所述的系統(tǒng),其特征在于所述使用者應(yīng)用程序使用應(yīng)用編程接口和所述應(yīng)用程序互配框架進(jìn)行對接。
19.如權(quán)利要求17所述的系統(tǒng),其特征在于所述使用者應(yīng)用程序從其它提供者獲得用戶界面元件。
20.如權(quán)利要求17所述的系統(tǒng),其特征在于所述用戶設(shè)備是移動電話。
21.一種計算機(jī)程序產(chǎn)品,包括被配置用于執(zhí)行以下操作的計算機(jī)代碼為規(guī)定至少一個用戶界面元件的使用者應(yīng)用程序提供使用者應(yīng)用程序興趣資源;將與所述使用者應(yīng)用程序興趣資源相對應(yīng)的用戶界面元件存儲在一個文件中;將所述用戶界面元件傳遞給應(yīng)用程序互配框架;以及將所述用戶界面元件添加到所述使用者用戶界面中。
22.如權(quán)利要求21所述的計算機(jī)程序產(chǎn)品,進(jìn)一步包括用于生成一類通用參數(shù)的計算機(jī)代碼。
23.如權(quán)利要求21所述的計算機(jī)程序產(chǎn)品,進(jìn)一步包括用于在應(yīng)用程序互配框架內(nèi)傳遞變元的計算機(jī)代碼。
全文摘要
一種向軟件應(yīng)用程序動態(tài)地添加特征的方法、設(shè)備、系統(tǒng)和計算機(jī)程序產(chǎn)品。使用一個用于向任何應(yīng)用程序添加任何特征的一般不可改變的應(yīng)用編程接口(API)的框架,來添加這些應(yīng)用程序。
文檔編號G06F9/44GK1652079SQ20051000566
公開日2005年8月10日 申請日期2005年1月21日 優(yōu)先權(quán)日2004年1月21日
發(fā)明者馬蒂·帕爾納納恩, 雅里·拉克索納恩, 薩米·羅桑達(dá)爾, 阿里·芒西卡馬基 申請人:諾基亞公司