문제

읽고 기사에게 말했다,나는 소프트 키를 사이에서 변화 장치입니다.일부를 말한다 -6 또는 -21 왼쪽 소프트 키를 -7 또는 -22 를 위해 오른쪽 소프트 키입니다.주어진 이 상황은 어떤 좋은 래퍼 또는 기능 또는 모범 사례를 제대로 처리?

하지 않을 경우 가능한 모든 장치에 대한 가장 좋은 방법은 무엇입을 지원하는 가장 장치는 무엇입니까?사소한이 없거나 해킹에서 모든?

도움이 되었습니까?

해결책

문제의 범위에 대한 느낌을주기 위해 이것을 살펴보십시오. 테이블 키 코드의.

OmermuHammed의 접근 방식은 대상 핸드셋에 따라 JAD 컨텐츠를 변경할 수 있다면 좋은 방법입니다.

앱이 전달 될 때까지 핸드셋을 식별 할 수없는 경우 다음과 같은 것을 볼 수 있습니다. 이것 기본적으로 실행 시간에 호스트 핸드셋을 결정하고 키 코드 매핑을 적절하게 설정합니다. 그래도 나에게 번거롭게 보입니다.

마지막으로 응용 프로그램이 코드의 하위 집합을 사용하는 경우 5월 하드 코딩 된 목록을 벗어날 수 있습니다. 일부 코드의 경우 충돌이 없거나 적은 충돌이 없습니다 (왼쪽은 일반적으로 -3 또는 -61이며 해당 코드는 일반적으로 다른 것을 의미하지 않습니다). 다시 말하지만 이상적인 접근법은 아닙니다.

당신을위한 최종 제안 리소스 : wurfl 또는 사용자 에이전트 문자열 및 j2mepolish 장치 키코드 용 장치 데이터베이스.

다른 팁

내가 찾은 가장 쉬운 방법은 ITU-T 표준을 기반으로 권장 값으로 코드로 설정하고 JAD 매개 변수로 재정의하는 것이 었습니다. 따라서 특정 앱의 경우 앱 시작 시간에 JAD 매개 변수의 존재를 찾고 설정하면 기본값을 사용합니다.

나는 이러한 기술과 유사한 기술을 사용하여 빠르게 포팅 될 수있는 앱을 작성 했으며이 프로세스는 일반적으로 잘 알려져 있습니다.

위의 Martin Clayton과 완전히 동의하지 않아야합니다. 이 방법 런타임에서 호스트 핸드셋을 식별하는 것은이 문제를 처리하는 올바른 방법입니다. 그리고 당신을 위해 이것을하기 위해 하나의 표준 클래스를 포함하는 것은 여러 자식/항아리 IMO와 함께 멍청한 것보다 훨씬 덜 번거 롭습니다.

이것은 내가 만든 방법으로 키 코드와 키 이름을 사용합니다. 나는 약 10 년 전에이 코드를 썼고 그 당시에는 대부분의 장치를 지원했습니다. (그러나 내가 찾은 한 가지 예외는 -6 그리고 -7 다른 방법으로 핵심 코드! 그러나 키 이름을 다시 사용하여이를 해결할 수 있지만 사용자 에이전트도 얻어야 할 수도 있습니다.)

    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;
        }

    }

기준으로 업데이트 된 코드 http://www.itey.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 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;
    }

}`

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()메소드가 있습니다.

ㄱ아름답하 getKeyName 방법을 반환되는 매우 동일한 대부분의 휴대폰에 그래서 매우 신뢰할 수 있지만,없는 서면에 아무것도 j2me 이후 약 2 년 전,그래서 내 기억에 재생할 수 있습니다 tricks.(당신은 경고되었)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top