本發(fā)明涉及Android系統(tǒng),特別涉及Android平臺(tái)管理USB設(shè)備的方法。
背景技術(shù):
Android操作系統(tǒng)中沒有檢測USB設(shè)備狀態(tài)是否正常的功能,加上由于USB設(shè)備狀態(tài)或電視端口USB設(shè)備接入個(gè)數(shù)的限制,部分USB設(shè)備無法正常使用,給用戶造成困擾。通過對USB設(shè)備狀態(tài)檢測,能檢測出已接入的設(shè)備是否能正常使用,可以對于異常的設(shè)備會(huì)有異常原因提示,并且解決設(shè)備無法正常使用的故障。目前的技術(shù)公開,主要在于配置USB設(shè)備與Android系統(tǒng)之間進(jìn)行通訊,實(shí)現(xiàn)Android系統(tǒng)對USB設(shè)備的兼容。但是缺乏類似于Windows系統(tǒng)中設(shè)備管理器應(yīng)用,以應(yīng)用的形式呈現(xiàn)出接入Android智能電視的所有USB設(shè)備的信息,顯示出由于主芯片USB端口支持設(shè)備個(gè)數(shù)限制、系統(tǒng)未預(yù)置USB設(shè)備驅(qū)動(dòng)造成的USB設(shè)備無法使用的具體原因。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:提供一種Android平臺(tái)管理USB設(shè)備的方法,解決Android智能電視上無USB設(shè)備狀態(tài)顯示的問題。
為解決上述問題,本發(fā)明采用的技術(shù)方案是:包括如下步驟:
a.在USB設(shè)備管理應(yīng)用中添加廣播接收類,在Android應(yīng)用的xml文件中靜態(tài)注冊USB設(shè)備接入、拔出廣播和Android系統(tǒng)啟動(dòng)完成廣播,并使Android系統(tǒng)發(fā)送所有USB設(shè)備插拔信息的廣播消息以及對應(yīng)的附加消息;
b.當(dāng)廣播接收服務(wù)接收到USB設(shè)備插拔信息的廣播消息以及對應(yīng)的附加消息時(shí),判斷Android系統(tǒng)啟動(dòng)是否完成,若Android系統(tǒng)未完成啟動(dòng),則進(jìn)入步驟c;若Android系統(tǒng)完成啟動(dòng),則進(jìn)入步驟d,
c.對于接收到的USB設(shè)備廣播消息,只保存不處理,等到Android系統(tǒng)啟動(dòng)完成后,在USB設(shè)備路徑目錄中遍歷所有文件夾,檢測USB設(shè)備路徑目錄下具有相同字符名的無冒號(hào)文件名文件夾與有包含冒號(hào)文件名文件夾是否存在一一對應(yīng)關(guān)系,如果不存在前述對應(yīng)關(guān)系,表示接入設(shè)備已經(jīng)超過該USB端口支持的最大USB接入數(shù);
d.延時(shí)一段時(shí)間后取出附加信息,若附加信息為拔出,則刪除已接入設(shè)備散列表中該設(shè)備的所有信息;
若附加信息為接入,則遍歷USB設(shè)備路徑,將USB設(shè)備路徑下的目錄與系統(tǒng)的設(shè)備散列表中設(shè)備信息的設(shè)備路徑比對,找到新接入的設(shè)備路徑,如果新增設(shè)備路徑只有一個(gè),表明 當(dāng)前端口接入的設(shè)備數(shù)已經(jīng)超過所支持的個(gè)數(shù),提示用戶將該設(shè)備接入到其他USB端口;如果新增設(shè)備路徑有多個(gè),則進(jìn)入到新增目錄中查看是否有ep_ee文件,若有ep_ee文件則表明當(dāng)前端口接入的設(shè)備數(shù)已經(jīng)超過所支持的個(gè)數(shù),提示用戶將該設(shè)備接入到其他USB端口,若沒有ep_ee文件則查看是否有driver目錄,如果沒有則表明當(dāng)前設(shè)備沒有驅(qū)動(dòng),提示用戶部分功能無法正常使用;
e.從USB設(shè)備路徑目錄下讀取USB設(shè)備創(chuàng)建的文件,解析出USB的設(shè)備狀態(tài)信息,根據(jù)所述設(shè)備狀態(tài)信息解析結(jié)果,生成一個(gè)設(shè)備散列表,用于保存各個(gè)USB設(shè)備信息;
當(dāng)需要查看Andriod平臺(tái)上連接的USB設(shè)備的實(shí)時(shí)狀態(tài)時(shí),從設(shè)備散列表中讀取設(shè)備信息,通過多級目錄展示各USB信息。
具體的,步驟e中USB設(shè)備信息包含ep是否正常接入、驅(qū)動(dòng)是否正常加載。
本發(fā)明的有益效果是:本發(fā)明可以有效檢測因USB端口設(shè)備接入個(gè)數(shù)限制而引起的設(shè)備不可用問題,因無驅(qū)動(dòng)原因造成的設(shè)備不可用問題,提升了智能電視的使用體驗(yàn)。
具體實(shí)施方式
下面以“解決A解決Android智能電視上無USB設(shè)備狀態(tài)顯示的問題”為例對本發(fā)明進(jìn)行具體說明。
1、在USB設(shè)備管理應(yīng)用中添加廣播接收類,并靜態(tài)注冊USB設(shè)備接入、拔出廣播和Android系統(tǒng)啟動(dòng)完成廣播,使Android系統(tǒng)發(fā)送所有USB設(shè)備插拔信息的廣播消息以及對應(yīng)的附加消息。通過在Android應(yīng)用的xml文件中注冊靜態(tài)廣播,可以在應(yīng)用未啟動(dòng)前也能接收到廣播。當(dāng)USB設(shè)備接入Android智能電視時(shí),調(diào)用UsbHostManager類的usbDeviceAdded方法,在這個(gè)方法中添加USB設(shè)備接入廣播;當(dāng)USB設(shè)備從Android智能電視拔出時(shí),調(diào)用UsbHostManager類的UsbDeviceRemoved方法,在這個(gè)方法中添加設(shè)備拔出廣播。
2、USB設(shè)備廣播接收服務(wù),接收到廣播消息后,首先判定Android系統(tǒng)啟動(dòng)是否完成。
2.1、若Android系統(tǒng)未啟動(dòng)完成
對于接收到的USB設(shè)備廣播消息,只保存不處理,等到Android系統(tǒng)在啟動(dòng)完成后,會(huì)發(fā)出BOOT_COMPLETED的開機(jī)完成廣播,根據(jù)在接收到USB設(shè)備接入、拔出廣播時(shí),是否已經(jīng)收到該啟動(dòng)完成廣播信息,判定Android系統(tǒng)是否已經(jīng)完成啟動(dòng)。由于智能電視內(nèi)置了藍(lán)牙、wifi、hub等USB設(shè)備,在開機(jī)過程中,這些設(shè)備自動(dòng)接入Android智能電視,調(diào)用UsbHostManager類的usbDeviceAdded方法,發(fā)出大量USB設(shè)備接入廣播??梢员苊庠贏ndroid系統(tǒng)啟動(dòng)完成前程序反復(fù)執(zhí)行大量讀寫操作,占用系統(tǒng)資源,影響Android系統(tǒng)開機(jī)時(shí)間。
Android系統(tǒng)啟動(dòng)過程中有大量的內(nèi)置設(shè)備接入信息,為避免遺漏和重復(fù)檢測,在Android系統(tǒng)啟動(dòng)完成后,統(tǒng)一做一次設(shè)備檢測。檢測方式是在sys/bus/usb/device(USB 設(shè)備路徑)目錄中遍歷所有文件夾。
目錄下不包含冒號(hào)的文件夾名文件夾中,保存著USB設(shè)備的信息,在應(yīng)用中新建一個(gè)設(shè)備對象,從該目錄下的product文件中讀取出設(shè)備名并保存為該設(shè)備的設(shè)備名。
目錄下包含冒號(hào)、并且冒號(hào)前內(nèi)容與該目錄完全一致的文件夾中,保存有USB設(shè)備接口信息。根據(jù)bInterfaceClass、bInterfaceSubClass、bInterfaceProtocol判定接口所屬的USB設(shè)備類型;根據(jù)bNumEndpoints內(nèi)容和ep文件的個(gè)數(shù)判定該接口端點(diǎn)是否完全接入。當(dāng)接口目錄下存在ep_ee文件時(shí),表示接入設(shè)備已經(jīng)超過該USB端口支持的最大USB接入數(shù)。
在sys/bus/usb/device目錄下,當(dāng)存在無冒號(hào)文件夾名文件夾,但不存在包含冒號(hào)且冒號(hào)前內(nèi)容與之完全一致的文件夾時(shí),表示接入設(shè)備已經(jīng)超過該USB端口支持的最大USB接入數(shù)。開機(jī)完成前由于內(nèi)置設(shè)備接入頻繁發(fā)送廣播,sys/bus/usb/device目錄下文件結(jié)構(gòu)快速發(fā)生改變,引起檢測不正確。在Android系統(tǒng)啟動(dòng)完成前,接收到設(shè)備接入廣播后,不做檢測處理,等到Android系統(tǒng)啟動(dòng)完成才進(jìn)行檢測。
2.2若Android系統(tǒng)啟動(dòng)完成
后臺(tái)收到廣播后,延遲10秒處理,避免開機(jī)時(shí)或USB供電異常而頻繁發(fā)出廣播造成的非必要處理。延時(shí)10秒后取出附加信息,若附加信息為拔出則刪除app中已接入設(shè)備散列表中該設(shè)備的所有信息。
若附加信息為拔出,則刪除已接入設(shè)備散列表中該設(shè)備的所有信息;
若附加信息為接入,則遍歷USB設(shè)備路徑,將USB設(shè)備路徑下的目錄與系統(tǒng)的設(shè)備散列表中設(shè)備信息的設(shè)備路徑比對,找到新接入的設(shè)備路徑,如果新增設(shè)備路徑只有一個(gè),表明當(dāng)前端口接入的設(shè)備數(shù)已經(jīng)超過所支持的個(gè)數(shù),提示用戶將該設(shè)備接入到其他USB端口;如果新增設(shè)備路徑有多個(gè),則進(jìn)入到新增目錄中查看是否有ep_ee文件,若有ep_ee文件則表明當(dāng)前端口接入的設(shè)備數(shù)已經(jīng)超過所支持的個(gè)數(shù),提示用戶將該設(shè)備接入到其他USB端口,若沒有ep_ee文件則查看是否有driver目錄,如果沒有則表明當(dāng)前設(shè)備沒有驅(qū)動(dòng),提示用戶部分功能無法正常使用。
3、系統(tǒng)從/sys/bus/usb/device下讀取USB設(shè)備創(chuàng)建的文件,解析出USB設(shè)備狀態(tài)信息。USB驅(qū)動(dòng)創(chuàng)建了設(shè)備的vid、pid、class、subclass、protocol、driver等文件,通過vid和pid可以判定設(shè)備的制造廠商。通過class、subclass、protocol可以判定USB的類型,通過driver可以判定設(shè)備是否已經(jīng)加載驅(qū)動(dòng)。根據(jù)上述設(shè)備狀態(tài)信息解析結(jié)果,生成一個(gè)散列表,保存各個(gè)USB設(shè)備信息,包含ep是否正常接入、驅(qū)動(dòng)是否正常加載等。散列表在用戶使用USB設(shè)備管理應(yīng)用查看USB信息時(shí)供應(yīng)用解析,根據(jù)散列表的數(shù)據(jù)呈現(xiàn)出Android系統(tǒng)中USB的實(shí)時(shí)信息。
當(dāng)需要查看Andriod平臺(tái)上連接的USB設(shè)備的實(shí)時(shí)狀態(tài)時(shí),從設(shè)備散列表中讀取設(shè)備信息,通過多級目錄展示各USB信息。
以上描述了本發(fā)明的基本原理和主要的特征,說明書的描述只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會(huì)有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明范圍內(nèi)。