일부 기사를 읽고 소프트 키는 장치마다 다릅니다. 일부는 왼쪽 소프트 키는 -6 또는 -21, 오른쪽 소프트 키는 -7 또는 -22라고합니다. 이 상황에서 제대로 처리 할 수있는 좋은 래퍼 또는 함수 또는 모범 사례가 있습니까?J2ME 소프트 키 래퍼
모든 장치에서 가능하지 않은 경우 대부분의 장치를 지원하는 가장 좋은 방법은 무엇입니까? 사소하거나 전혀 해킹하지 않습니까?
일부 기사를 읽고 소프트 키는 장치마다 다릅니다. 일부는 왼쪽 소프트 키는 -6 또는 -21, 오른쪽 소프트 키는 -7 또는 -22라고합니다. 이 상황에서 제대로 처리 할 수있는 좋은 래퍼 또는 함수 또는 모범 사례가 있습니까?J2ME 소프트 키 래퍼
모든 장치에서 가능하지 않은 경우 대부분의 장치를 지원하는 가장 좋은 방법은 무엇입니까? 사소하거나 전혀 해킹하지 않습니까?
문제의 범위에 대한 느낌을주기 위해이 키 코드를 살펴보십시오.
예를 들어 핸드셋 웹 브라우저에서 다운로드 요청의 사용자 에이전트 헤더 필드를보고 대상 핸드셋에 따라 JAD 콘텐츠를 변경할 수있는 경우 Omermuhammed의 접근 방식이 좋습니다.
앱이 전달 될 때까지 핸드셋을 식별 할 수없는 경우 기본적으로 실행시 호스트 핸드셋을 결정하고 키 코드 매핑을 적절하게 설정하는 this과 같은 것을 볼 수 있습니다. 나에게 성가 시게 보입니다.
마지막으로 응용 프로그램에서 코드 하위 집합을 사용하는 경우 은 하드 코드 된 목록에서 벗어날 수 있어야합니다. 일부 코드의 경우 충돌이 거의 없거나 거의 없습니다 (LEFT는 일반적으로 -3 또는 -61이며 그 코드는 일반적으로 다른 것을 의미하지는 않습니다). 다시 말하지만 이상적인 접근 방식은 아닙니다.
최종 추천 리소스 : wurfl 또는 사용자 에이전트 문자열 및 기기 키 코드 용 기기 데이터베이스 J2MEPolish
MIDP는 정의 표준 ITU-T 키패드의 키 상수 다음 KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_POUND 및 KEY_STAR. 응용 프로그램은 추가 키 코드의 존재에 의존해서는 안됩니다. 특히, 키를 여러 번 눌러 생성 된 대문자 또는 소문자 또는 문자는 하위 수준 키 이벤트에서 지원되지 않습니다. 키에 할당 된 "이름"은 getKeyName() 메소드를 사용하여 질의 할 수 있습니다.
AFAIR은 getKeyName 방법은 상당히 안정적이었다 그래서 대부분의 전화기에서 같은 아주 반환하지만, 내 기억이 트릭을 재생할 수 있도록 내가, 약 2 년 전부터 J2ME에서 아무것도 작성하지 않았습니다. (당신은 경고되었다)
내가 찾은 가장 쉬운 방법은 코드에서 ITU-T 표준을 기반으로 권장 값을 설정하고 jad 매개 변수로 재정의하는 것입니다. 따라서 특정 앱의 경우 앱 시작 시간에 jad 매개 변수의 존재 여부를 찾고 설정합니다. 그렇지 않으면 기본값을 사용합니다.
나는이 기술과 유사한 기술을 사용하여 신속하게 이식 할 수있는 응용 프로그램을 작성했으며이 프로세스는 일반적으로 잘 알려져 있습니다.
위의 Martin Clayton과 완전히 일치하지 않는 경우 런타임시 호스트 핸드셋 식별의 this method과 비슷한 것이이 문제를 해결하는 절대적인 방법입니다. 그리고이를 위해 표준 클래스 하나를 포함하는 것이 여러 JAD/JAR IMO를 사용하는 것보다 덜 귀찮은 일입니다.
이것은 내가 작성한 키 코드와 키 이름을 사용하는 방법입니다. 필자는 약 10 년 전에이 코드를 작성했으며 그 당시에는 대부분의 장치를 지원했습니다. (그러나 내가 발견 한 예외 중 하나는 -6
과 -7
키 코드가있는 Sagem 모델입니다!하지만 당신은 아마 해결할 다시 키 이름을 사용하는 수 -하지만 당신은 너무 사용자 에이전트를 획득 할 필요가있을 수있다) http://www.iteye.com/topic/179073에 따라
private static final int SOFT_BUTTON_KEY_CODE_UNDEFINED = -999;
private static int LEFT_SOFT_BUTTON_KEY_CODE = SOFT_BUTTON_KEY_CODE_UNDEFINED;
private static int RIGHT_SOFT_BUTTON_KEY_CODE = SOFT_BUTTON_KEY_CODE_UNDEFINED;
private boolean isLeftSoftButton(int keyCode) {
// Try the standard code
if (keyCode == -6) {
return true;
}
// Try the code we have already detected
else if (keyCode == LEFT_SOFT_BUTTON_KEY_CODE && LEFT_SOFT_BUTTON_KEY_CODE != SOFT_BUTTON_KEY_CODE_UNDEFINED) {
return true;
}
// If we haven't yet detected the code...
else if (LEFT_SOFT_BUTTON_KEY_CODE == SOFT_BUTTON_KEY_CODE_UNDEFINED) {
// try to detect it
String keyName = getKeyName(keyCode).toUpperCase();
if (keyName.equals("SOFT1") || keyName.equals("LEFT SELECTION KEY") || keyName.equals("LEFT SOFTKEY") || keyName.equals("LEFT SOFT KEY") || keyName.equals("SOFTKEY 1") || keyName.equals("-6")) {
// It's the left soft button! So remember the code for next time...
LEFT_SOFT_BUTTON_KEY_CODE = keyCode;
// Return true
return true;
}
else {
// keyName didn't match, so return false
return false;
}
}
else {
// keyCode didn't match
return false;
}
}
private boolean isRightSoftButton(int keyCode) {
// Try the standard code
if (keyCode == -7) {
return true;
}
// Try the code we have already detected
else if (keyCode == RIGHT_SOFT_BUTTON_KEY_CODE && RIGHT_SOFT_BUTTON_KEY_CODE != SOFT_BUTTON_KEY_CODE_UNDEFINED) {
return true;
}
// If we haven't yet detected the code...
else if (RIGHT_SOFT_BUTTON_KEY_CODE == SOFT_BUTTON_KEY_CODE_UNDEFINED) {
// try to detect it
String keyName = getKeyName(keyCode).toUpperCase();
if (keyName.equals("SOFT2") || keyName.equals("RIGHT SELECTION KEY") || keyName.equals("RIGHT SOFTKEY") || keyName.equals("RIGHT SOFT KEY") || keyName.equals("SOFTKEY 4") || keyName.equals("SOFTKEY 2") || keyName.equals("-7")) {
// It's the right soft button! So remember the code for next time...
RIGHT_SOFT_BUTTON_KEY_CODE = keyCode;
// Return true
return true;
}
else {
// keyName didn't match, so return false
return false;
}
}
else {
// keyCode didn't match
return false;
}
}
업데이트 코드, ...
private static final int SOFT_BUTTON_KEY_CODE_UNDEFINED = -999;
private static int LEFT_SOFT_BUTTON_KEY_CODE = SOFT_BUTTON_KEY_CODE_UNDEFINED;
private static int RIGHT_SOFT_BUTTON_KEY_CODE = SOFT_BUTTON_KEY_CODE_UNDEFINED;
private boolean isLeftSoftButton(int keyCode) {
// Try the standard codes
// standard || Motorola || Siemens || Motorola 2 || Motorola 1
if (keyCode == -6 || keyCode == -21 || keyCode == -1 || keyCode == -20 || keyCode == 21) {
return true;
}
// Try the code we have already detected
else if (keyCode == LEFT_SOFT_BUTTON_KEY_CODE && LEFT_SOFT_BUTTON_KEY_CODE != SOFT_BUTTON_KEY_CODE_UNDEFINED) {
return true;
}
// If we haven't yet detected the code...
else if (LEFT_SOFT_BUTTON_KEY_CODE == SOFT_BUTTON_KEY_CODE_UNDEFINED) {
// try to detect it
String keyName = getKeyName(keyCode).toUpperCase();
if (keyName.equals("SOFT1") || keyName.equals("LEFT SELECTION KEY") || keyName.equals("LEFT SOFTKEY") || keyName.equals("LEFT SOFT KEY") || keyName.equals("SOFTKEY 1") || keyName.equals("-6")) {
// It's the left soft button! So remember the code for next time...
LEFT_SOFT_BUTTON_KEY_CODE = keyCode;
// Return true
return true;
}
else {
// keyName didn't match, so return false
return false;
}
}
else {
// keyCode didn't match
return false;
}
}
private boolean isRightSoftButton(int keyCode) {
// Try the standard codes
// standard || Motorola || Siemens || Motorola 1
if (keyCode == -7 || keyCode == -22 || keyCode == -4 || keyCode == 22) {
return true;
}
// Try the code we have already detected
else if (keyCode == RIGHT_SOFT_BUTTON_KEY_CODE && RIGHT_SOFT_BUTTON_KEY_CODE != SOFT_BUTTON_KEY_CODE_UNDEFINED) {
return true;
}
// If we haven't yet detected the code...
else if (RIGHT_SOFT_BUTTON_KEY_CODE == SOFT_BUTTON_KEY_CODE_UNDEFINED) {
// try to detect it
String keyName = getKeyName(keyCode).toUpperCase();
if (keyName.equals("SOFT2") || keyName.equals("RIGHT SELECTION KEY") || keyName.equals("RIGHT SOFTKEY") || keyName.equals("RIGHT SOFT KEY") || keyName.equals("SOFTKEY 4") || keyName.equals("SOFTKEY 2") || keyName.equals("-7")) {
// It's the right soft button! So remember the code for next time...
RIGHT_SOFT_BUTTON_KEY_CODE = keyCode;
// Return true
return true;
}
else {
// keyName didn't match, so return false
return false;
}
}
else {
// keyCode didn't match
return false;
}
}`
을 @. funkybro - 내 제안 중 하나 였으므로 부분적으로 동의하지 않는 것 같습니다 :) 일부 응용 프로그램에는 JAD (각 사용자마다 고유 한 사용자 별 데이터)가 있지만 단일 JAR이 있습니다. 이 경우 JAD에 여분의 2 줄을 추가하는 것은별로 중요하지 않습니다. drubin의 의견도 참조하십시오. –
사실,하지만 실행중인 플랫폼에 대한 런타임 인식의 가치는 소프트 키 코드보다 더 깊게 실행됩니다. 별도의 JAR을 사용하지 않고도 멋진 UI를 그리고 핸드셋 관련 버그를 해결할 수 있습니다. – funkybro