Domanda

La lettura di alcuni articoli, mi ha detto che i tasti soft varia tra i dispositivi. Alcuni dice -6 o -21 per tasto sinistro morbido e -7 o -22 per tasto funzione destro. Data questa situazione, c'è qualche buona involucro o funzione o di buone pratiche per gestire in modo corretto?

Se non è possibile per tutti i dispositivi, qual è il modo migliore per sostenere la maggior parte dei dispositivi? con minore o nessuna mod a tutti?

È stato utile?

Soluzione

Per darvi un'idea della portata del problema di dare un'occhiata a questo di keycode.

L'approccio di Omermuhammed è una buona se si è in grado di variare il contenuto JAD a seconda del telefono di destinazione, per esempio, cercando in campo di intestazione user-agent in una richiesta di download da un browser web on-portatile.

Se non è possibile identificare il portatile fino a quando l'applicazione è stata consegnata, si poteva guardare qualcosa come questo che determina fondamentalmente il microtelefono ospitante in fase di esecuzione e imposta le mappature keycode appropriato. Sembra ingombrante per me però.

Infine, se l'applicazione utilizza un sottoinsieme dei codici Voi possono essere in grado di farla franca con le liste hardcoded - per alcuni codici non ci sono o poche collisioni (a sinistra è di solito o -3 o -61, e quei codici di solito non significano qualcosa d'altro). Anche in questo caso, non è un approccio ideale.

Dotazioni finali suggeriti per voi: WURFL o stringhe agente utente e la J2MEPolish database di dispositivi per keycodes dispositivo

Altri suggerimenti

Il modo più semplice che ho trovato è stato quello di configurarlo in codice con i valori consigliati sulla base di standard ITU-T e sostituirla con un parametro Jad. Quindi, per ogni applicazione, cercherà esistenza del parametro Jad in app tempo di avvio e impostarlo, altrimenti userà i valori di default.

Ho usato questi e simili tecniche per scrivere applicazioni che possono essere rapidamente portato, e questo processo è generalmente noto.

sono d'accordo completamente con Martin Clayton sopra, qualcosa di simile a questo metodo di accoglienza identificazione telefoni in fase di esecuzione è assolutamente il modo giusto per affrontare questo problema. E tra cui una classe standard per fare questo per voi è molto meno ingombrante di cazzeggio con più JADS / JAR IMO.

Questo è il metodo che ho creato, che utilizza i codici chiave e nomi chiave. Ho scritto questo codice circa 10 anni fa e allora ha sostenuto la maggior parte dei dispositivi. (L'unica eccezione che ho trovato, tuttavia, è stato alcuni modelli Sagem che hanno la -6 e -7 codici chiave viceversa Ma probabilmente si potrebbe ovviare a quella di riutilizzare i nomi dei tasti -. Ma potrebbe essere necessario per ottenere l'user agent troppo)

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

    }

codice aggiornato, sulla base di 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 definisce la seguente costante per i tasti di una tastiera standard ITU-T: KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_POUND e KEY_STAR. Le applicazioni non dovrebbero fare affidamento sulla presenza di eventuali codici chiave aggiuntivi. In particolare, maiuscole e minuscole o caratteri generati premendo un tasto più volte non sono supportati da eventi chiave di basso livello. Un "nome" assegnato al tasto può essere interrogato utilizzando il metodo GetKeyName ().

AFAIR il metodo GetKeyName restituito proprio la stessa cosa sulla maggior parte dei telefoni in modo che fosse abbastanza affidabile, ma non ho scritto nulla in J2ME da circa 2 anni fa, quindi la mia memoria potrebbe giocare brutti scherzi. (Siete stati avvertiti)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top