J2ME開發之手機鍵值適配

2021-08-23 15:18:09 字數 3214 閱讀 3476

本來不想寫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屬性獲...