2010-02-14 18 views
10

के साथ कैच कीप्रेस को पकड़ें मैं एंड्रॉइड एसडीके के साथ एक फोन कीप्रेस कैसे पकड़ सकता हूं? मैं .. कुछ भी खोजने के बिना घंटे के लिए चारों ओर देख रहा हैएंड्रॉइड

उदाहरण के लिए:

कुछ मामलों में, मैं जब कोई उपयोगकर्ता "लटका" फोन पर बटन दबाता संदेश को पकड़ने के लिए चाहते हैं और फिर ओएस तक पहुंचने से पहले संदेश को त्यागें।

क्या यह संभव है? एक दृश्य से

हैंडल onKey:

उत्तर

16

आप या तो एक दृश्य से या सामान्य रूप में अपने पूरे आवेदन के लिए महत्वपूर्ण घटनाओं संभाल कर सकते हैं

public boolean onKey(View v, int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     case KeyEvent.KEYCODE_ENTER: 
     /* This is a sample for handling the Enter button */ 
     return true; 
    } 
    return false; 
} 

OnKeyListener लागू करने के लिए याद रखें और अपने श्रोता सेट करने के लिए YourView.setOnKeyListener(this);

दूसरी संभावना होगी:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_MENU: 
     /* Sample for handling the Menu button globally */ 
     return true; 
    } 
    return false; 
} 

आप onKeyUp पर एक नज़र भी देख सकते हैं।

संसाधन: http://developer.android.com/reference/android/view/View.html

और यहाँ आप के साथ सभी KeyEvents

+2

ध्यान दें कि यह सब चाबी के लिए काम नहीं करता है एक सूची देख सकते हैं। घर निश्चित रूप से इस तरह से पकड़ा नहीं जा सकता है, और END_CALL नहीं हो सकता है - मैं उस बारे में भूल जाता हूं। साथ ही, यदि आप बैक बटन को अवरुद्ध करना चाहते हैं, तो आप नए एंड्रॉइड एसडीके में बैकप्रेसेड() पर लागू करने से बेहतर हैं, हालांकि यह पुराने फोन पर काम नहीं करता है। – CommonsWare

+0

END_CALL को ऐप द्वारा भी अवरुद्ध नहीं किया जा सकता है। ध्यान दें कि मूल पोस्टर किसी अन्य ऐप पर पहुंचने से पहले कुंजी को अवरुद्ध करना चाहता है, जो किसी भी कुंजी के लिए यह संभव नहीं है। – hackbod

+0

यह भी नहीं कि हार्डवेयर END_CALL बटन कुछ फोनों पर भी मौजूद नहीं है, जैसे मोटोरोला Droid और नेक्सस वन, इसलिए इस बटन के साथ कुछ भी विशेष करना शायद एक अच्छा विचार नहीं है। –