本來不想寫j2me開發的時候要根據不同手機平台適配各種鍵值這個問題,覺得沒撒意思,也沒什麼技術含量,但是今天看到了乙個讓我很無語的東西,所以我決定要寫出來。稍候再說這個讓我不爽的東西,先不要影響我們分享技術的心情。now begin …
很多人都說,要適配所有手機的鍵值是不可能的。因為,已是j2me中沒有對手機的左右軟鍵的鍵值定義,而是很多手機也沒定義,再者就是手機多多了,像華為,中興,聯想,諾基亞,摩托羅拉,西門子,索愛,黑莓,多普達等等這些大廠家都沒個定數,更別所多如牛毛的山寨機了,所以這種說法也是無可厚非的。 即使你把 左鍵 -7 , 右鍵 -6 , ok鍵 -5 這些都設定好能支援大部分的手機,還是難免有個害群之馬啊。 所以, 沒有標準導致了這個嚴重的問題 :要一次性搞定所有手機的鍵值問題難道非常之大。
用canvas實現乙個鍵位設定介面,捕獲keypressed事件;
在設定介面中以提示性語言引導使用者按鍵;
將得到的鍵值儲存到rms中備用;
完成鍵位設定;
在以後要使用按鍵的canvas中呼叫rms中的資料,完成操作。
下面是完成這個設定的簡要**結構:
//首先你需要乙個陣列:
private
string
drawarray= ;
//然後你需要兩個標誌位
private
boolean
config_finished
= false
;private
boolean
firsttime
= true
;//再者你需要一點實現邏輯if(
drawindex
> 6)
if(!config_finished
)else
firsttime
= false
;starty= 0
;
initstr
= "";}
else
//接下來我們需要一點控制信心和按鍵事件的響應
protected
void
keypressed
(int
key)
elseif(
config_finished
&& key
== config
.getok
())repaint();
}//最後我們需要乙個儲存的動作
private
boolean
storekeyvalue
(int
whatkey
, int
key){}
請注意,上面這個**片段只是完成按鈕設定的框架,而不是完整**,如果你需要完整**可以留下資訊並且發郵件告訴我。我會分享給你的。
下面說一下上面這段**的大致思路:
建立乙個你希望設定的鍵位的陣列:private string drawarray , 裡面存放著一些提示資訊,這些資訊用來引導使用者去按鍵,然後使用paint()在介面上繪製這些資訊,但又按鍵事件的時候系統會呼叫protected void keypressed(int key)方法,而我們在這個方法中處理一些事件,不作一些控制。例如改變繪製字串的指標,例如修改鍵位設定的執行狀態 「成功」 或者 「失敗」 。 另外還需要控制的就是設定的完成狀態 , 最終目的是把鍵值寫入到rms中備用 。
下面是鍵值呼叫的持久類的完整**:
package
org.
allove
.weather
.lib
;public
class
keymap
至於這個keyvaluerms 怎麼去實現就不是本文的主要內容了,這是recordstore的內容,這裡就不贅述了 。
總的來說,我覺得這是乙個很簡單的問題,也很容易想到,應該不到5分鐘吧,想到這個解決方案。由於我覺得這個東西很簡單,價值也不那麼明顯,所以導致了我看到乙個東西之後很鬱悶。今天,無意中搜尋鍵值玩,發現了萬方資料裡面的一片**:《一種j2me軟體適配不同手機鍵值的方法》讓我倍感無語。這個方法被人申請專利了,我很無語,這東西也能申請壯麗,我操,早知道我早兩年也去申請了。 還說得那麼玄乎,很糾結啊。
最後,要來說一下這個可行性和使用者體驗的問題。
其實這東西不是很好,完全依賴於keypressed方法,如果不支援這個方法呢?
在某些手機中按左右軟鍵的時候是沒有反應的,比如巨頭諾基亞
再說使用者體驗,這個問題有點嚴重,一旦設定錯誤可能就需要從新安裝軟體,這是相當不友好的,因為rms的資料要解除安裝才能清除,其實這個到也無所謂啦,你可以在軟體裡面做乙個重新設定的功能,這到不致命
由於手機廠商數目巨大,這個方法的代價是巨大的,慎用
拋棄這種方法之後如何去更快捷的適配不同手機的鍵值問題呢?也許按手機型號發布軟體是乙個最簡單最直接的方案,侷限性就是你必須知道每個平台的鍵值,希望midp3.0不要再有這個問題了。現在,我們就假設,我們已經能夠獲取到不同手機的鍵值,那麼我們應該如何去寫**呢?在每乙個 keypressed裡面設定switch case -6 / -7 / -5 的方法顯然是不對的。 我們希望這樣操作:
package
org.
allove
.weather
.lib
;public
class
keymap
/// ..... many other things ...
import
package
org.
allove
.weather
.lib
.keymap
;public
class
acanvas
extends
canvas
;// ..... many other things ...
protected
void
keypressed
(int
key)
elseif(
key==
keymap
.key_ok
)elseif(
key==
keymap
.key_rightsoft
)repaint();
}// ..... many other things ...
j2me canvas,
j2me開發,
recordstore,
rms,
手機鍵值
J2ME專業手機遊戲開發基礎(1)
遊戲的基本結構遊戲是什麼呢?在遊戲中,往往是顯示各種各樣的畫面,玩家可以做一些設定好的控制,畫面根據玩家的控制有所變化。從這兒可以看出,遊戲至少需要三個功能 顯示畫面,接受玩家輸入和對輸入產生反饋。這就是常說的渲染,輸入輸出和邏輯三個模組。將這三個模組組合在一起有很多方法。比如事件驅動 畫面保持不變...
J2ME 開發工具
j2me wireless toolkit 手機廠商sdk wtk 的全稱是sun j2me wireless toolkit sun的無線開發工具包。這一工具包的設計目的是為了幫助開發人員簡化j2me的開發過程。該工具箱包含了完整的生成工具 實用程式以及裝置 器。a.wtk 2.2 目前各大手機廠...
J2ME獲取IMEI手機串號
1 moto系列的手機可以通過讀取系統的imei屬性獲得 string imei system.getproperty imei 或string imei system.getproperty phone.imei 2 siemens系列的手機可以通過讀取系統的com.siemens.imei屬性獲...