2009-11-15 9 views
5

कुछ लेख पढ़ना, मुझे बताया कि सॉफ्ट कुंजी डिवाइस के बीच बदलती है। कुछ कहते हैं -6 या -21 बाएं मुलायम कुंजी के लिए और -7 या -22 सही मुलायम कुंजी के लिए। इस स्थिति को देखते हुए, क्या यह ठीक से संभालने के लिए कोई अच्छा रैपर या फ़ंक्शन या सर्वोत्तम अभ्यास है?जे 2 एमई सॉफ्ट कुंजी रैपर

यदि सभी उपकरणों के लिए संभव नहीं है, तो अधिकांश उपकरणों का समर्थन करने का सबसे अच्छा तरीका क्या है? मामूली या कोई हैक के साथ बिल्कुल?

उत्तर

4

आपको समस्या के दायरे के लिए एक महसूस करने के लिए keycodes के table पर एक नज़र डालें।

Omermuhammed का दृष्टिकोण एक अच्छा है यदि आप लक्ष्य हैंडसेट के आधार पर जेएडी सामग्री को अलग करने में सक्षम हैं, उदाहरण के लिए ऑन-हैंडसेट वेब ब्राउज़र से डाउनलोड अनुरोध में उपयोगकर्ता-एजेंट शीर्षलेख फ़ील्ड को देखकर।

यदि आप ऐप वितरित होने तक हैंडसेट की पहचान नहीं कर सकते हैं, तो आप this जैसे कुछ देख सकते हैं जो मूल रूप से रन टाइम पर होस्ट हैंडसेट निर्धारित करता है और कुंजीकोड मैपिंग उचित रूप से सेट करता है। हालांकि मुझे बोझिल लग रहा है।

अंत में, यदि आपके आवेदन कोड का एक सबसेट का उपयोग करता है आप हार्ड-कोडेड सूचियों के साथ दूर प्राप्त करने में सक्षम हो सकता है - कुछ कोड के लिए वहाँ रहे हैं शून्य या बहुत कम टकराव (बाएं आमतौर पर या तो -3 या -61 है, और उन कोडों का आमतौर पर कुछ और मतलब नहीं है)। फिर, एक आदर्श दृष्टिकोण नहीं है।

अंतिम सुझाव आपके लिए संसाधन: wurfl या उपयोगकर्ता एजेंट तार, और J2MEPolish डिवाइस कुंजीकोड के लिए डिवाइस डेटाबेस।

-2

MIDP को परिभाषित करता है एक मानक आईटीयू आयकर कीपैड की चाबी के लिए निरंतर निम्नलिखित: 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 साल पहले के बाद से जे 2 एमई में कुछ भी लिखा है। (आप चेतावनी दी गई है)

4

आईटीयू-टी मानक के आधार पर अनुशंसित मूल्यों के साथ इसे कोड में सेट करना और इसे जाड पैरामीटर के साथ ओवरराइड करना सबसे आसान तरीका था। इसलिए, किसी भी दिए गए ऐप के लिए, यह ऐप स्टार्टअप समय पर जाड पैरामीटर के अस्तित्व की तलाश करेगा और इसे सेट करेगा, अन्यथा यह डिफ़ॉल्ट मानों का उपयोग करेगा।

मैंने इन और समान तकनीकों का उपयोग उन ऐप्स को लिखने के लिए किया है जिन्हें तेजी से पोर्ट किया जा सकता है, और यह प्रक्रिया आम तौर पर अच्छी तरह से जानी जाती है।

0

ऊपर मार्टिन क्लेटन के साथ पूरी तरह से असहमत होना है, रनटाइम पर होस्ट हैंडसेट की पहचान करने के this method के समान कुछ इस समस्या से निपटने का बिल्कुल सही तरीका है। और आपके लिए ऐसा करने के लिए एक मानक वर्ग भी शामिल है, जो कई जेएडी/जेएआरएस आईएमओ के साथ चारों ओर फफिंग से कम बोझिल है।

+0

@। funkybro - यह मेरे सुझावों में से एक था, इसलिए मुझे लगता है कि आप केवल आंशिक रूप से असहमत हैं :) कुछ ऐप्स में जेएडी में उपयोगकर्ता-विशिष्ट डेटा होता है (जो प्रत्येक उपयोगकर्ता के लिए अद्वितीय है), लेकिन एक एकल जार। उस मामले में जेएडी को अतिरिक्त लाइन या दो जोड़ना कोई बड़ा सौदा नहीं है। ड्रबिन की टिप्पणी भी देखें। –

+0

सच है, लेकिन आप जिस प्लेटफ़ॉर्म पर हैं, उसके बारे में रनटाइम जागरूकता का मूल्य नरम कुंजी कोड से गहरा चलता है; यह आपको अच्छे यूआई बनाने और हैंडसेट-विशिष्ट बग के आसपास काम करने की अनुमति देता है, सभी अलग जेएआर के बिना। – funkybro

0

यह वह तरीका है जिसे मैंने बनाया है, जो कुंजी कोड और कुंजी नामों का उपयोग करता है। मैंने इस कोड को लगभग 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.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; 
    } 

}`