天天看點

不同品牌BREW手機間的應用移植

版權聲明:本文為半吊子子全棧工匠(wireless_com,同公衆号)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/6520457

            針對手機的硬體差異性,為了減少應用移植中的工作,可以在應用中采用自适應的方法。每個手機都有各自的類型辨別——平台辨別,如果應用自身根據平台辨別以及相應硬體資訊動态加載相應的資源,無疑可以實作某些應用的零工作量移植。獲得手機平台辨別和相關硬體資訊的方式之一是使用ISHELL_GetDeviceInfo()和ISHELL_GetDeviceInfoEx()。

            ISHELL_GetDeviceInfo()可以在 AEE層中查詢有關手機性能的資訊,例如所支援的 RAM 總量、螢幕顯示等其它項目。要擷取 AEEDeviceInfo結構中的 dwNetLinger 和 dwSleepDefer值,在調用此函數之前,wStructSize 必須等于sizeof(AEEDeviceInfo)。

            ISHELL_GetDeviceInfoEx()用于擷取有關裝置的特定資訊(AEEDeviceItem)。此函數使用 ID 指定所需的資訊,傳回時在緩沖區中包含對應的資訊。這些ID所表示的含義如表15-2所示。

ID的名稱

 含義說明

AEE_DEVICEITEM_CHIP_ID

 辨別晶片組 ID 的字元串

AEE_DEVICEITEM_MOBILE_ID

 辨別手持裝置的移動 ID 的一個 ASCII 字元串

AEE_DEVICEITEM_AMR_VOCODER_SUPPORT

 是否支援 AMR (Adaptive Multi-Rate) 聲碼器

AEE_DEVICEITEM_EVRC_VOCODER_SUPPORT

 是否支援 EVRC(增強型變速率編碼)聲碼器

AEE_DEVICEITEM_IS96_VOCODER_SUPPORT

 否支援 QCELP-IS96(8K)(Qualcomm 碼激勵線性預測編碼)聲碼器

AEE_DEVICEITEM_IS96A_VOCODER_SUPPORT

 否支援 QCELP-IS96A(8K)(Qualcomm 碼激勵線性預測編碼)聲碼器

AEE_DEVICEITEM_IS733_VOCODER_SUPPORT

 是否支援 QCELP-IS733(Qualcomm 碼激勵線性預測編碼)聲碼器

AEE_DEVICEITEM_SMV_VOCODER_SUPPORT

 是否支援可選擇模式的聲碼器

AEE_DEVICEITEM_SYS_COLORS_DISP1 AEE_DEVICEITEM_SYS_COLORS_DISP2 AEE_DEVICEITEM_SYS_COLORS_DISP3 AEE_DEVICEITEM_SYS_COLORS_DISP4

 傳回與特定顯示螢幕關聯的系統顔色清單

AEE_DEVICEITEM_DISPINFO1 AEE_DEVICEITEM_DISPINFO2 AEE_DEVICEITEM_DISPINFO3 AEE_DEVICEITEM_DISPINFO4

 傳回特定顯示螢幕的相關資訊

AEE_DEVICEITEM_CARRIER_ID

 辨別手持裝置的營運商 ID 的一個 uint32 值

AEE_DEVICEITEM_SIDHASH

 傳回手持裝置的支付帳戶的一個散列。 可用于确定是否已更換了支付帳戶,例如在調換了 RUIM 卡時。 請注意,不會傳回具體的帳号,而隻是傳回一個帳戶字元串的散列。

AEE_DEVICESTATE_KEYS_PRESSED

 傳回處于按下狀态的按鍵的值

AEE_DEVICESTATE_FLIP_OPEN

 在裝置翻蓋處于打開狀态時傳回 TRUE,否則傳回 FALSE

AEE_DEVICESTATE_HEADPHONE_ON

 如果裝置耳機是打開的,傳回 TRUE,否則傳回 FALSE

AEE_DEVICESTATE_KEYGUARD_ON

 如果裝置的鍵盤是打開,将傳回 TRUE,否則傳回 FALSE

AEE_DEVICESTATE_SPEAKER_ON

 如果裝置的揚聲器為打開則傳回 TRUE,否則傳回 FALSE

AEE_DEVICEITEM_USER

 OEM 定義項目的起始點

表 15-2:可以用ISHELL_GetDeviceInfoEx()擷取的有關裝置的特定資訊

根據AEEDeviceInfo和AEEDeviceItem中的資訊,應用可以做到動态加載資源檔案。當然這些資源資訊也可以儲存在伺服器上,應用程式通過網絡通信的方式獲得這些資源資料,進而完成一個應用在不同手機上的适配。

如果某些手機不支援某些接口,應用程式可以通過判斷該接口是否建立成功獲得該資訊。例如在記憶體沒有問題的情況下,建立IPosDet接口失敗,很可能是由于該手機不支援定位功能造成的。這時,應用程式就應該不提供定位功能,進而成為隻具備浏覽查詢功能的一個LBS應用。

如果是兩台手機對同一接口的功能存在差異(一般出現在IRingerMgr或者IAddrBook),這時需要應用程式多做一些工作。例如采用一個配置檔案來定義位址簿或者鈴聲目錄中的域,應用程式在啟動時根據手機資訊來讀取配置檔案,這樣就能夠進一步彌補手機間的差異進而很好的實作移植了。

本文來自CSDN部落格,轉載請标明出處:

http://blog.csdn.net/wireless_com/archive/2010/11/02/5981424.aspx

繼續閱讀