《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之86——不同品牌BREW手機間的應用移植
一個應用在不同型別BREW 手機上的移植主要是處理手機之間的差異性,這裡的差異性包括硬體差異性和軟體差異性。硬體差異性是指手機自身的記憶體和儲存空間大小,螢幕尺寸和色深,鍵盤佈局以及手機中的特殊硬體的支援(如照相機,遊戲手柄等)。軟體差異性包括BREW的版本,手機軟體編譯器的版本,一些多媒體編解碼器的異同,以及對某些BREW API是否支援等等。由此可見,瞭解運營商所制定的手機相關規範對移植BREW應用是非常有益的。
針對手機的硬體差異性,為了減少應用移植中的工作,可以在應用中採用自適應的方法。每個手機都有各自的型別標識——平臺標識,如果應用自身根據平臺標識以及相應硬體資訊動態載入相應的資源,無疑可以實現某些應用的零工作量移植。獲得手機平臺標識和相關硬體資訊的方式之一是使用ISHELL_GetDeviceInfo()和ISHELL_GetDeviceInfoEx()。
ISHELL_GetDeviceInfo()可以在 AEE層中查詢有關手機效能的資訊,例如所支援的 RAM 總量、螢幕顯示等其它專案。要獲取 AEEDeviceInfo結構中的 dwNetLinger 和 dwSleepDefer值,在呼叫此函式之前,wStructSize 必須等於sizeof(AEEDeviceInfo)。其中AEEDeviceInfo是這樣一個資料結構:
typedef struct
{
uint16 cxScreen; // 實際螢幕大小 (畫素)
uint16 cyScreen; // 實際螢幕大小 (畫素)
uint16 cxAltScreen; // 第二顯示螢幕的螢幕大小
uint16 cyAltScreen; // 第二顯示螢幕的螢幕大小
uint16 cxScrollBar; // 標準滾動條的寬度
uint16 wEncoding; // 字符集編碼 (AEE_ENC_UNICODE, ....)
uint16 wMenuTextScroll; // 應該用於自動滾動的毫秒
uint16 nColorDepth; // 色深 (1表示黑色,2表示灰色等)
EmptyEnum unused2;
uint32 wMenuImageDelay; // 應該用於影像延遲的毫秒
uint32 dwRAM; // 已安裝的 RAM 總量 (RAM)
flg bAltDisplay:1; // 裝置具有備選顯示螢幕 (尋呼機)
flg bFlip:1; // 裝置為翻蓋電話
flg bVibrator:1; // 安裝了振動器
flg bExtSpeaker:1; // 安裝了外部揚聲器
flg bVR:1; // V支援語音識別
flg bPosLoc:1; // 支援定位
flg bMIDI:1; // 支援 MIDI 檔案格式
flg bCMX:1; // 支援 CMX 音訊
uint32 dwPromptProps; // 預設提示屬性
uint16 wKeyCloseApp; // 關閉當前應用的按鍵
uint16 wKeyCloseAllApps; // 關閉所有應用的按鍵 (預設為 AVK_END)
uint32 dwLang; // 由 Resource Loader 使用 (見下方的 AEE_LNG_XXX)
//
// 注:要使用以下各欄位,必須先將結構的
// wStructSize 填用才能將其傳送到 GetDeviceInfo呼叫
//
uint16 wStructSize; // 該結構的大小1
uint32 dwNetLinger; // PPP 振鈴定時器 (毫秒)
uint32 dwSleepDefer; // 啟用的非睡眠模式 (毫秒)
uint16 wMaxPath; // 檔案路徑最大長度
uint32 dwPlatformID; // 平臺 ID
} 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),這時需要應用程式多做一些工作。例如採用一個配置檔案來定義地址簿或者鈴聲目錄中的域,應用程式在啟動時根據手機資訊來讀取配置檔案,這樣就能夠進一步彌補手機間的差異進而很好的實現移植了。
相關文章
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之87——面向BREW平臺的移植
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之12—BREW裡面有什麼
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之6---移動增值業務概述
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之61-BREW開發商的註冊
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之77——BREW中位置資訊的獲得(LBS應用)
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之34—手機上應用的預安裝
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之8—Symbian,WindowsMobile,Palm,Linux,J2ME,BREWWindowsLinux
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之56—BREWSDK個版本的區別(下)
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之51—BREWSDK九大功能之安全服務
- 3G與全業務運營應高度重視網路資訊保安
- 機器學習與移動應用開發的未來機器學習
- Mac brew swoole 安裝與升級Mac
- 移動應用開發者之間的中間階級已經消失
- macOS - brew 提速的方法Mac
- 【開發者必看】移動應用趨勢洞察白皮書-開發與營銷篇
- 使用 brew 和 brew-cask 安裝常用程式
- Mac中brew命令的使用Mac
- mac下用brew安裝 mysqlMacMySql
- 移動應用使用的間歇時間商機
- IT運營與DevOps:有何不同?dev
- Brew Elasticsearch 升級Elasticsearch
- MAC 安裝BrewMac
- brew安裝很慢
- mac上brew使用Mac
- 楊建允:新電商助力企業實現新品牌的營銷運營發展進階
- 什麼是BREW分發系統?
- 移動應用如何針對不同使用者精準定製應用內容或風格?
- 進階 Redis 技術與應用Redis
- Android系統移植與驅動開發Android
- Mac下使用Brew搭建PHP(LNMP/LAMP)開發環境MacPHPLNMPLAMP開發環境
- JAVA進階:VO(DTO)與PO(DAO)之間的轉換Java
- BREW中的特殊語音處理
- 企業員工業務桌面系統的開發應用與管理
- brew 常用命令
- brew update /usr/local is not writable
- Mac下安裝brewMac
- HomeBrew/brew cask常用操作
- Cocoapods安裝 - brew