專利名稱:一種Android系統(tǒng)與電信智能卡通信的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信和智能卡技術(shù)領(lǐng)域,尤其ー種Android系統(tǒng)與電信智能卡通信的方法及裝置。
背景技術(shù):
目前,很多智能手機(jī)都采用Android系統(tǒng)平臺(tái),但是在Android系統(tǒng)中,出于安全考慮,直接與SIM (Subscriber Identity Module,用戶身份識(shí)別模塊)卡通信的接ロ被屏蔽,使得第三方應(yīng)用程序不能直接與SIM卡進(jìn)行數(shù)據(jù)交互,從而導(dǎo)致第三方應(yīng)用程序無法直接使用SIM卡提供的服務(wù)。現(xiàn)有技術(shù)中,第三方應(yīng)用程序直接利用已封裝的用于讀寫SIM卡電話本或短消息的方法(即函數(shù))間接訪問SIM卡,該訪問方式一方面破壞了現(xiàn)有SIM卡電話本或短消息的本身應(yīng)用規(guī)則,另一方面也為第三方應(yīng)用程序使用的SIM卡服務(wù)帶來了隱患,使得SIM卡作為安全服務(wù)載體的價(jià)值受到較大的限制。
發(fā)明內(nèi)容
本發(fā)明提供ー種Android系統(tǒng)與電信智能卡通信的方法及裝置,用以實(shí)現(xiàn) Android系統(tǒng)和電信智能卡之間的通信,為第三方應(yīng)用程序使用電信智能卡提供的各種服務(wù)提供高效、安全的環(huán)境。本發(fā)明實(shí)施例提供的具體技術(shù)方案如下ー種Android系統(tǒng)與電信智能卡通信的方法,包括根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù);根據(jù)接收的訪問電信智能卡的應(yīng)用程序協(xié)議數(shù)據(jù)單元APDU指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容;調(diào)用所述接ロ函數(shù),將所述數(shù)據(jù)內(nèi)容重組為APDU指令,并將重組后的APDU指令發(fā)送至所述電信智能卡。ー種Android系統(tǒng)與電信智能卡通信的裝置,包括第一處理單元,用于根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù);第二處理單元,用于根據(jù)接收的訪問電信智能卡的應(yīng)用程序協(xié)議數(shù)據(jù)單元APDU 指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容;第三處理單元,用于調(diào)用所述接ロ函數(shù),將所述數(shù)據(jù)內(nèi)容重組為APDU指令,并將所述重組后的APDU指令發(fā)送至所述電信智能卡?;谏鲜黾夹g(shù)方案,本發(fā)明實(shí)施例中,根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù)后,根據(jù)接收的訪問電信智能卡的APDU指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容,并調(diào)用接ロ函數(shù)將該數(shù)據(jù)內(nèi)容重組為APDU指令,將重組后的APDU指令發(fā)送至電信智能卡,從而通過Android系統(tǒng)直接與電信智能卡進(jìn)行通信,使第三方應(yīng)用程序可以在高效、安全的環(huán)境下使用電信智能卡提供的各種服務(wù)。
圖1為本實(shí)施例中Android系統(tǒng)與電信智能卡通信的方法流程圖;圖2為本實(shí)施例中第三方應(yīng)用程序、與電信智能卡通信的類、電話進(jìn)程的關(guān)系示意圖;圖3為本實(shí)施例中Android系統(tǒng)與電信智能卡通信的裝置結(jié)構(gòu)圖。
具體實(shí)施例方式為了通過Android系統(tǒng)和電信智能卡通信,為第三方應(yīng)用程序直接使用電信智能卡提供的各種服務(wù)提供高效、安全的環(huán)境,本發(fā)明實(shí)施例提供了ー種Android系統(tǒng)與電信智能卡通信的方法。下面結(jié)合附圖對(duì)本發(fā)明優(yōu)選的實(shí)施方式進(jìn)行詳細(xì)說明。如附圖1所示,本發(fā)明實(shí)施例中,Android系統(tǒng)與SIM卡通信的詳細(xì)方法流程如下步驟101 根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù)。實(shí)際應(yīng)用中,與電信智能卡通信的對(duì)象為Android系統(tǒng)電話進(jìn)程(即phone進(jìn)程) 中的CommandsInterface對(duì)象,接ロ函數(shù)包括第一接ロ函數(shù)(sendEnvelope成員函數(shù))和第二接ロ函數(shù)(iccIO成員函數(shù))。較佳地,獲取與電信智能卡通信的對(duì)象的接ロ函數(shù)后,將該對(duì)象包含的第一接ロ 函數(shù)和第二接ロ函數(shù)封裝為ー接ロ對(duì)象,該接ロ對(duì)象用于第三方應(yīng)用程序與電信智能卡通信時(shí)直接調(diào)用。其中,Android系統(tǒng)電話進(jìn)程中預(yù)置有與電信智能通信的類。其中,在Android系統(tǒng)電話進(jìn)程中預(yù)置與電信智能卡通信的類時(shí),將采用移動(dòng)終端廠商提供的platform私鑰簽名對(duì)該程序簽名后下載安裝至Android系統(tǒng)電話進(jìn)程的過程中,電話進(jìn)程采用預(yù)置的platform公鑰對(duì)該類進(jìn)行驗(yàn)簽,并在驗(yàn)簽通過后進(jìn)行安裝。電話進(jìn)程是Android系統(tǒng)的核心模塊,主要負(fù)責(zé)管理與電話相關(guān)的功能,例如,收發(fā)短消息、通話管理及與SIM卡的交互等。本實(shí)施例中,將與電信智能卡通信的類安裝至 Android系統(tǒng)的電話進(jìn)程中,使得該類具有電話進(jìn)程的權(quán)限,能夠與電信智能卡進(jìn)行通信。 如附圖2所示,為第三方應(yīng)用程序、與電信智能卡通信的類、電話進(jìn)程的關(guān)系示意圖。步驟102 根據(jù)接收的訪問電信智能卡的應(yīng)用程序協(xié)議數(shù)據(jù)單元(APDU)指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容。實(shí)際應(yīng)用中,第三方應(yīng)用程序可以直接發(fā)送APDU指令,也可以發(fā)送與電信智能卡通信的數(shù)據(jù)內(nèi)容,在發(fā)送數(shù)據(jù)內(nèi)容時(shí),按照與APDU指令各字節(jié)相一致的順序發(fā)送。較佳地,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容之前,接收第三方應(yīng)用程序發(fā)送的簽名信息,采用預(yù)設(shè)的公鑰驗(yàn)證簽名信息的有效性,并在確定簽名信息有效后,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容,該簽名信息為根據(jù)第三方應(yīng)用程序的程序包生成數(shù)字摘要后,采用預(yù)設(shè)的私鑰對(duì)數(shù)字摘要進(jìn)行加密生成。通過對(duì)第三方應(yīng)用程序進(jìn)行認(rèn)證,以保證電信智能卡數(shù)據(jù)的安全,能夠?qū)υL問電信智能卡的機(jī)制進(jìn)行安全控制,保證正常的電信應(yīng)用不受影響。步驟103 調(diào)用接ロ函數(shù),將數(shù)據(jù)內(nèi)容重組為APDU指令,并將重組后的APDU指令發(fā)送至電信智能卡。其中,將數(shù)據(jù)內(nèi)容重組為APDU指令,具體為判斷數(shù)據(jù)內(nèi)容的預(yù)定字節(jié)是否為設(shè)定值,若是,則調(diào)用與電信智能卡通信的對(duì)象的第一接ロ函數(shù),將該數(shù)據(jù)內(nèi)容重組為 ppDownload指令;否則,調(diào)用與電信智能卡通信的對(duì)象的第二接ロ函數(shù)將數(shù)據(jù)內(nèi)容重組為 ppDownload指令之外的其他APDU指令。具體地,判斷接收的APDU指令的第二字節(jié)對(duì)應(yīng)的數(shù)據(jù)是否為0xC2,若是,則調(diào)用 sendEnvelope成員函數(shù),否則,調(diào)用iccIO成員函數(shù)。較佳地,將重組后的APDU指令發(fā)送至電信智能卡后,調(diào)用接ロ函數(shù),接收電信智能卡返回的APDU響應(yīng),并獲取APDU響應(yīng)中攜帯的處理結(jié)果信息。本實(shí)施例中,在將與電信智能卡通信的程序下載至phone進(jìn)程中時(shí),還需要將與電信智能卡通信的類對(duì)應(yīng)的進(jìn)程的屬性設(shè)置為“com. android, phone”。例如,可采用語句 android :process = “com. android, phone"設(shè)直;tfe^gjS'l"生。其中,與電信智能卡通信的類調(diào)用phone進(jìn)程中與電信智能卡通信的 CommandsInterface對(duì)象時(shí),由于CommandsInterface對(duì)象是作為ー個(gè)私有變量存在于 phone進(jìn)程中,需要采用Java語言的反射技術(shù)獲得。例如,調(diào)用CommandsInterface對(duì)象的具體代碼如下所示StkService mStkService = (StkService)StkService. getlnstance ();”犾取 StkService 對(duì)象Field field = mStkService. getClass () · getDeclaredField ( "mCmdlf") -J / 獲取成員變量名為mCmdlf的私有變量field. setAccessible (true) ;//將私有變量設(shè)置為可以訪問Object obj = field, get (mStkService) -J/ 1 )! CommandsInterface 的
值CommandsInterface mCM = (Commandshterface) obj ;//強(qiáng)制類型轉(zhuǎn)換具體地,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容為APDU指令中除第一字節(jié)外的所有數(shù)據(jù)內(nèi)容,或者APDU指令中第二字節(jié)和數(shù)據(jù)域的數(shù)據(jù)內(nèi)容。其中,調(diào)用sendEnvelope 成員函數(shù)吋,相應(yīng)的與電信智能卡通信的數(shù)據(jù)內(nèi)容為APDU指令中第二字節(jié)和數(shù)據(jù)域的數(shù)據(jù)內(nèi)容,調(diào)用iccIO成員函數(shù)吋,相應(yīng)的與電信智能卡通信的數(shù)據(jù)內(nèi)容為APDU指令中除第一字節(jié)外的所有數(shù)據(jù)內(nèi)容。例如,CommandsInterface實(shí)例中的iccIO禾ロ sendEnvelope成員函數(shù)表示如下mCM. iccIO (command, f ileid, path, pi, p2, p3, data, pin2, response) ;//command 為APDU的第二字節(jié)的內(nèi)容,表示指令類型,fileid為目標(biāo)文件標(biāo)識(shí),path為目標(biāo)文件路徑,pi、p2、p3為APDU第三、四、五字節(jié)的內(nèi)容,data為APDU命令體數(shù)據(jù),pin2參數(shù)留空, response用于接收SIM卡返回的APDU指令中包含的處理結(jié)果信息。
mCM. sendEnvelope (data, response) -J/ 對(duì)應(yīng) data 為 APDU 指令 A0C2000000 之后的APDU命令體數(shù)據(jù),response用于接收SIM卡返回的APDU指令中包含的處理結(jié)果信息。其中,SIM卡對(duì)接收的APDU指令的處理結(jié)果信息通過response參數(shù)返回。本實(shí)施例中,在將iccIO和sendEnvelope接ロ函數(shù)封裝為接ロ對(duì)象時(shí),具體可以采用Android接ロ描述語言(AIDL語言)對(duì)iccIO和sendEnvelope接ロ函數(shù)進(jìn)行封裝,即將與電信智能卡通信的服務(wù)以AIDL方式公開。第三方應(yīng)用程序可以直接調(diào)用對(duì)iccIO和 sendEnvelope接ロ函數(shù)封裝得到的接ロ對(duì)象,基于該接ロ對(duì)象中的iccIO或sendEnvelope 接ロ函數(shù),將與電信智能卡通信的數(shù)據(jù)內(nèi)容重組為APDU指令發(fā)送給電信智能卡,以及獲取電信智能卡返回的APDU指令中包含的處理結(jié)果信息。通過封裝為接ロ對(duì)象,可以使得第三方應(yīng)用程序直接調(diào)用該接ロ對(duì)象與電信智能卡進(jìn)行通信,即可以將接ロ對(duì)象面向所有的第三方應(yīng)用程序。例如,將 CommandsInterface 實(shí)例中的 iccIO 禾ロ sendEnvelope 接 ロ 函數(shù)封裝為ー
接ロ對(duì)象,代碼表示如下
interface IccService {
//參數(shù)command: APDU指令的第二字節(jié)
//參數(shù)fileid:文件編號(hào);如果command等于0xC2,則為O
//^ path:文件的路徑信息;如果command等于0xC2,則為null
//參數(shù)pl, p2, p3: APDU指令的三個(gè)參數(shù);如果command等于0xC2,則為全為0
//參數(shù)data: APDU指令中的數(shù)據(jù)域
//參數(shù)response:返回APDU指令的執(zhí)行結(jié)果
void executelcc(mt command,mt nleid,string path,mt pl’mt p2’mt p3,string data,
Response response); //發(fā)送 CLA 字節(jié)為 AO 的 APDU 指令 }在接ロ對(duì)象中,如果command的值等于0xC2則調(diào)用CommandsInterface對(duì)象中的 sendEnvelope接ロ函數(shù),否則調(diào)用CommandsImerfdice實(shí)例中的iccIO接ロ函數(shù)?;谏鲜鲈?,如附圖3所示,本發(fā)明實(shí)施例中,Android系統(tǒng)與電信智能卡通信的裝置主要包括以下處理單元第一處理單元301,用于根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù);第二處理單元302,用于根據(jù)接收的訪問電信智能卡的應(yīng)用程序協(xié)議數(shù)據(jù)單元 (APDU)指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容;第三處理單元303,用于調(diào)用接ロ函數(shù),將數(shù)據(jù)內(nèi)容重組為APDU指令,并將重組后的APDU指令發(fā)送至電信智能卡。基于上述技術(shù)方案,本發(fā)明實(shí)施例中,根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù)后,根據(jù)接收的訪問電信智能卡的APDU指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容,并調(diào)用接ロ函數(shù)將該數(shù)據(jù)內(nèi)容重組為APDU指令,將重組后的APDU指令發(fā)送至電信智能卡,從而通過Android系統(tǒng)直接與電信智能卡進(jìn)行通信,使第三方應(yīng)用程序可以在高效、安全的環(huán)境下使用電信智能卡提供的各種服務(wù)。并且,本發(fā)明實(shí)施例中,通過將CommandsInterface對(duì)象中的iccIO和 sendEnvelope接ロ函數(shù)封裝為ー接ロ對(duì)象,從而能夠使得該接ロ對(duì)象面向第三方應(yīng)用程序公開,使得第三方應(yīng)用程序通過該接ロ對(duì)象直接與電信智能卡進(jìn)行通信。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.ー種Android系統(tǒng)與電信智能卡通信的方法,其特征在干,包括根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù);根據(jù)接收的訪問電信智能卡的應(yīng)用程序協(xié)議數(shù)據(jù)單元APDU指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容;調(diào)用所述接ロ函數(shù),將所述數(shù)據(jù)內(nèi)容重組為APDU指令,并將重組后的APDU指令發(fā)送至所述電信智能卡。
2.如權(quán)利要求1所述的方法,其特征在于,將所述數(shù)據(jù)內(nèi)容重組為APDU指令,包括判斷所述數(shù)據(jù)內(nèi)容的預(yù)定字節(jié)是否為設(shè)定值,若是,則調(diào)用所述對(duì)象的第一接ロ函數(shù),將所述數(shù)據(jù)內(nèi)容重組為ppDownload指令;否則,調(diào)用所述對(duì)象的第二接ロ函數(shù)將所述數(shù)據(jù)內(nèi)容重組為所述ppDownload指令之外的其他APDU指令。
3.如權(quán)利要求2所述的方法,其特征在干,獲取與電信智能卡通信的對(duì)象的接ロ函數(shù)后,還包括將所述對(duì)象包含的第一接ロ函數(shù)和第二接ロ函數(shù)封裝為ー接ロ對(duì)象,所述接ロ對(duì)象用于第三方應(yīng)用程序與所述電信智能卡通信時(shí)直接調(diào)用;在所述接ロ對(duì)象被所述第三方應(yīng)用程序調(diào)用后,獲取需要與所述電信智能卡通信的數(shù)據(jù)內(nèi)容,調(diào)用所述接ロ對(duì)象包含的第一接ロ函數(shù)或第二接ロ函數(shù)將所述數(shù)據(jù)內(nèi)容重組為 APDU指令,并發(fā)送至所述電信智能卡。
4.如權(quán)利要求3所述的方法,其特征在于,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容之 IU,還包括接收所述第三方應(yīng)用程序發(fā)送的簽名信息,采用預(yù)設(shè)的公鑰驗(yàn)證所述簽名信息的有效性,并在確定所述簽名信息有效后,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容,所述簽名信息為根據(jù)所述第三方應(yīng)用程序的程序包生成數(shù)字摘要后,采用預(yù)設(shè)的私鑰對(duì)所述數(shù)字摘要進(jìn)行加密生成。
5.如權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在干,將重組后的APDU指令發(fā)送至所述電信智能卡后,包括調(diào)用所述接ロ函數(shù),接收所述電信智能卡返回的APDU響應(yīng),并獲取所述APDU響應(yīng)中攜帶的處理結(jié)果信息。
6.ー種Android系統(tǒng)與電信智能卡通信的裝置,其特征在干,包括第一處理單元,用于根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接ロ函數(shù);第二處理單元,用于根據(jù)接收的訪問電信智能卡的應(yīng)用程序協(xié)議數(shù)據(jù)單元APDU指令, 獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容;第三處理單元,用于調(diào)用所述接ロ函數(shù),將所述數(shù)據(jù)內(nèi)容重組為APDU指令,并將所述重組后的APDU指令發(fā)送至所述電信智能卡。
7.如權(quán)利要求6所述的裝置,其特征在干,所述第三處理單元具體用于調(diào)用所述接ロ 函數(shù),將所述數(shù)據(jù)內(nèi)容重組APDU指令吋,判斷所述數(shù)據(jù)內(nèi)容的預(yù)定字節(jié)是否為設(shè)定值,若是,則調(diào)用所述對(duì)象的第一接ロ函數(shù),將所述數(shù)據(jù)內(nèi)容重組為ppDownload指令,否則,調(diào)用所述對(duì)象的第二接ロ函數(shù)將所述數(shù)據(jù)內(nèi)容重組為所述ppDownload指令之外的其他APDU指令。
8.如權(quán)利要求7所述的裝置,其特征在干,所述第一處理單元獲取與電信智能卡通信的對(duì)象的接ロ函數(shù)后,還用于將所述對(duì)象包含的第一接ロ函數(shù)和第二接ロ函數(shù)封裝為ー 接ロ對(duì)象,所述接ロ對(duì)象用于第三方應(yīng)用程序與所述電信智能卡通信時(shí)直接調(diào)用;所述第三處理單元還用于調(diào)用所述接ロ對(duì)象后,獲取需要與所述電信智能卡通信的數(shù)據(jù)內(nèi)容,將所述數(shù)據(jù)內(nèi)容重組為符合規(guī)范的APDU指令。
9.如權(quán)利要求8所述的裝置,其特征在干,所述第二處理單元獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容之前,還用于接收所述第三方應(yīng)用程序發(fā)送的簽名信息,采用預(yù)設(shè)的公鑰驗(yàn)證所述簽名信息的有效性,并在確定所述簽名信息有效后,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容,所述簽名信息為根據(jù)所述第三方應(yīng)用程序的程序包生成數(shù)字摘要后,采用預(yù)設(shè)的私鑰對(duì)所述數(shù)字摘要進(jìn)行加密生成。
10.如權(quán)利要求6-9任一項(xiàng)所述的裝置,其特征在干,所述第三處理單元將重組后的 APDU指令發(fā)送至所述電信智能卡后,還用于調(diào)用所述接ロ函數(shù),接收所述電信智能卡返回的APDU響應(yīng),并獲取所述APDU響應(yīng)中攜帶的處理結(jié)果信息。
全文摘要
本發(fā)明公開了一種Android系統(tǒng)與電信智能卡通信的方法,用以實(shí)現(xiàn)Android系統(tǒng)和電信智能卡之間的通信。該方法為根據(jù)Android系統(tǒng)電話進(jìn)程中用于與電信智能卡通信的類獲取與電信智能卡通信的對(duì)象的接口函數(shù),根據(jù)接收的訪問電信智能卡的應(yīng)用程序協(xié)議數(shù)據(jù)單元APDU指令,獲取需要與電信智能卡通信的數(shù)據(jù)內(nèi)容,調(diào)用所述接口函數(shù),將所述數(shù)據(jù)內(nèi)容重組為APDU指令,并將重組后的APDU指令發(fā)送至所述電信智能卡。本發(fā)明同時(shí)公開了一種Android系統(tǒng)與電信智能卡通信的裝置。
文檔編號(hào)H04W88/02GK102547661SQ20111042465
公開日2012年7月4日 申請(qǐng)日期2011年12月16日 優(yōu)先權(quán)日2011年12月16日
發(fā)明者謝樹豐 申請(qǐng)人:北京握奇數(shù)據(jù)系統(tǒng)有限公司