Вопрос

Читая некоторые статьи, сказали мне, что мягкие клавиши варьируются между устройствами. Некоторые говорят -6 или -21 для левой мягкой клавиши и -7 или -22 для правого мягкого ключа. Учитывая эту ситуацию, есть ли хорошая обертка, функция или лучшая практика, чтобы правильно справиться с ней?

Если не возможно для всех устройств, как лучше всего поддерживать большинство устройств? с незначительным или вообще нет взлома?

Это было полезно?

Решение

Чтобы вы почувствовали, что сфера этой проблемы посмотрите на это стол ключевых кодов.

Подход Omermuhammed хорош, если вы можете различить контент JAD в зависимости от целевого телефона, например, просмотрев поле заголовка пользователя-агента в запросе загрузки из веб-браузера на руке.

Если вы не можете идентифицировать трубку до тех пор, пока приложение не будет доставлено, вы можете посмотреть на что -то вроде это Это в основном определяет телефон хоста во время выполнения и устанавливает соответствующие сопоставления ключевых кодов. Похоже на меня выглядит громоздко.

Наконец, если в вашем приложении используется подмножество кодов, вы май иметь возможность сойти с рук с твердыми списками -для некоторых кодов нет или мало столкновений (слева обычно -3 или -61, и эти коды обычно не значат что -то другое). Опять же, не идеальный подход.

Окончательные предложенные ресурсы для вас: Вурфл или строки пользовательского агента, и J2Mepolish База данных устройств для кодов ключей устройства.

Другие советы

Самый простой способ, который я обнаружил,-это установить его в коде с рекомендуемыми значениями на основе стандарта ITU-T и переопределить его параметром JAD. Таким образом, для любого данного приложения он будет искать существование параметра JAD во время запуска приложения и установить его, в противном случае он будет использовать значения по умолчанию.

Я использовал эти и аналогичные методы для написания приложений, которые могут быть быстро перенесены, и этот процесс в целом хорошо известен.

Придется полностью не согласиться с Мартином Клейтоном выше, что -то похожее на Этот способ Определение мобильных телефонов хоста во время выполнения - это абсолютно правильный способ решить эту проблему. И в том числе один стандартный класс, чтобы сделать это для вас, гораздо менее громоздкий, чем Faffing с несколькими Jads/Jars IMO.

Это метод, который я создал, который использует коды ключей и имена ключей. Я написал этот код около 10 лет назад и тогда он поддерживал большинство устройств. (Однако одним исключением, которые я обнаружил, были некоторые модели Sagem, которые имеют -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.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 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-TEP: 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 лет назад, так что моя память могла бы играть трюки. (Вы были предупреждены)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top