开发j2me的同仁肯定都碰到过手机键值适配的问题,每个手机的键值都不相同,杯具。。。。
看过很多文章的解决方法,比如用户设置后rms保存,看了之后都觉得很不好用,特写了一个类供参考,共同进步。。。
代码思想其实就是查找左右键的keycode,至于数字键开发j2me的都知道怎么解决,不说了。。。不喜欢写东西,当备份
import javax.microedition.lcdui.Canvas;
/**
* J2me左右键自动判断
* @author tim
*
*/
public class KeyCode {
/**
* 左软键
*/
private int KEY_SOFT1;
/**
* 右软键
*/
private int KEY_SOFT2;
private Canvas canvas;
public KeyCode(Canvas canvas){
this.canvas = canvas;
}
public void init() {
setKnownSoftKeyCodes();
}
public int getLeftKey() {
return KEY_SOFT1;
}
public int getRightKey() {
return KEY_SOFT2;
}
private void setKnownSoftKeyCodes() {
try {
//Nokia
Class.forName("com.nokia.mid.ui.FullCanvas");
KEY_SOFT1 = -6;
KEY_SOFT2 = -7;
return;
} catch (Throwable ex) {
}
try {
//西门子
Class.forName("com.siemens.mp.game.Light");
KEY_SOFT1 = -1;
KEY_SOFT2 = -4;
return;
} catch (ClassNotFoundException _ex) {
}
//不检测Moto键值,把摩托归类为非主流手机
/* try {
//摩托罗拉
Class.forName("com.motorola.phonebook.PhoneBookRecord");
KEY_SOFT1 = -21;
KEY_SOFT2 = -22;
KEY_SOFT1 = -10;
KEY_SOFT2 = -11;
return;
} catch (ClassNotFoundException _ex) {
}*/
try {
//黑莓手机,没有左右键值,用Q 和 P 替换
Class.forName("net.rim.device.api.system.Application");
KEY_SOFT1 = 113;
KEY_SOFT2 = 112;
return;
} catch (ClassNotFoundException ex) {
}
try {
//LG
Class.forName("com.mot.iden.util.Base64");
KEY_SOFT1 = -20;
KEY_SOFT2 = -21;
return;
} catch (Throwable ex) {
}
//默认手机,使用一下代码检测,此时可以检查大部分手机
//如三星,摩托,索爱等大品牌手机
try {
if (canvas.getKeyName(-6).toUpperCase().indexOf("SOFT") >= 0) {
KEY_SOFT1 = -6;
KEY_SOFT2 = -7;
return;
}
if (canvas.getKeyName(-10).toUpperCase().indexOf("SOFT") >= 0) {
KEY_SOFT1 = -10;
KEY_SOFT2 = -11;
return;
}
if (canvas.getKeyName(-21).toUpperCase().indexOf("SOFT") >= 0) {
KEY_SOFT1 = -21;
KEY_SOFT2 = -22;
return;
}
if (canvas.getKeyName(21).toUpperCase().indexOf("SOFT") >= 0) {
KEY_SOFT1 = 21;
KEY_SOFT2 = 22;
return;
}
} catch (Exception ex) {
}
//以下代码检测非主流手机,小部分手机属于此行列
boolean leftInit = false;
boolean rightInit = false;
for (int i = -127; i < 127; i++) {
if (leftInit && rightInit) {
return;
}
try {
if (canvas.getKeyName(i).toUpperCase().indexOf("SOFT") < 0) {
continue;
}
if (canvas.getKeyName(i).indexOf("1") >= 0) {
KEY_SOFT1 = i;
leftInit = true;
}
if (canvas.getKeyName(i).indexOf("2") >= 0) {
KEY_SOFT2 = i;
rightInit = true;
}
continue;
} catch (Exception ex) {
}
}
//如果以上代码都没有检测到键值,默认为-6 和 -7
KEY_SOFT1 = -6;
KEY_SOFT2 = -7;
}
}