سؤال

أخبرني قراءة بعض المقالات أن مفاتيح ناعمة تختلف بين الأجهزة. يقول البعض -6 أو -21 للمفتاح الناعم الأيسر و -7 أو -22 للمفتاح الناعم الأيمن. بالنظر إلى هذا الموقف، هل هناك أي غلاف جيد أو وظيفة أو أفضل ممارسة للتعامل معها بشكل صحيح؟

إن لم يكن ممكنا لجميع الأجهزة، ما هي أفضل طريقة لدعم معظم الأجهزة؟ مع القاصر أو لا الاختراق على الإطلاق؟

هل كانت مفيدة؟

المحلول

لتعطيك شعور لنطاق المشكلة إلقاء نظرة على هذا الطاولة من keycodes.

نهج Omermuhammed هو فكرة جيدة إذا كنت قادرا على تغيير محتوى JAD اعتمادا على الهاتف الهدف، على سبيل المثال من خلال النظر إلى حقل رأس وكيل المستخدم في طلب تنزيل من متصفح الويب عبر الهاتف.

إذا لم تتمكن من تحديد الهاتف حتى يتم تسليم التطبيق، فيمكنك أن تنظر إلى شيء مثل هذه يحدد ذلك أساسا الهاتف المضيف في وقت التشغيل ويقوم بتعيين تعيينات Keycode بشكل مناسب. يبدو مرهقا لي رغم ذلك.

أخيرا، إذا كان طلبك يستخدم مجموعة فرعية من الرموز لك مايو تكون قادرة على الابتعاد مع قوائم صلبة مشفرة - بالنسبة لبعض الرموز، لا توجد تصادمات أو قليلة (اليسار عادة ما، إما -3 أو -61، وعادة ما تعني هذه الرموز شيئا آخر). مرة أخرى، وليس نهج مثالي.

الموارد النهائية المقترحة لك: Wurfl. أو سلاسل وكيل المستخدم، و J2Mepolish. قاعدة بيانات الأجهزة ل Keycodes KeyCodes.

نصائح أخرى

أسهل طريقة وجدتها هي إعدادها في التعليمات البرمجية مع القيم الموصى بها بناء على معيار ITU-T وتجاوزه باستخدام معلمة JAD. لذلك، لأي تطبيق معين، ستبحث عن وجود معلمة JAD في وقت بدء تشغيل التطبيق وتعيينه، وإلا فإنه سيستخدم القيم الافتراضية.

لقد استخدمت هذه التقنيات والتقنيات المماثلة لكتابة التطبيقات التي يمكن استئنافها بسرعة، وهذه العملية معروفة بشكل عام.

يجب أن لا أوافق تماما مع مارتن كلايتون أعلاه، شيء مشابه ل هذه الطريقة من تحديد الهواتف المضيفة في وقت التشغيل هو بالطريقة الصحيحة تماما للتعامل مع هذه المشكلة. و بما في ذلك فئة قياسية واحدة للقيام بذلك من أجلك أن تكون مرهقة أقل بكثير من الناخب مع IMO Jads / Jars متعددة.

هذه هي الطريقة التي قمت بإنشائها، والتي تستخدم الرموز الرئيسية والأسماء الرئيسية. كتبت هذا الرمز منذ حوالي 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-T: KEY_NUM0، KEY_NUM1، KEY_NUM2، KEY_NUM4، KEY_NUM5، KEY_NUM7، KEY_NUM7، KEY_NUM7، KEY_NUM8، KEY_NUM9، KEY_NUM8، KEY_NUM9، KEY_N_POUND، و KEY_STAR. يجب ألا تعتمد التطبيقات على وجود أي رموز رئيسية إضافية. على وجه الخصوص، لا يتم دعم الأحرف أو الأحرف الكبيرة والصغيرة الناتجة عن الضغط على مفتاح عدة مرات من خلال الأحداث الرئيسية ذات المستوى المنخفض. يمكن الاستعلام عن "اسم" معين إلى المفتاح باستخدام طريقة GetKeyName ().

عفرة عادت طريقة GetKeyName هي نفسها نفسها في معظم الهواتف، لذلك كان موثوقا تماما، لكنني لم أكتب أي شيء في J2ME منذ حوالي عامين، لذلك قد تلعب ذاكرتي الحيل. (لقد تم تحذيرك)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top