2011-04-22 9 views
5

मैं अपनी मुख्य गतिविधि के KEYDown() को KEYCODE_BACK के साथ आमंत्रित करने की कोशिश कर रहा हूं, ताकि यह व्यवहार करे जैसे मैंने 'बैक' बटन दबाया। ,नकली KeyEvent * बिल्कुल * असली "बटन की तरह काम नहीं करता है। क्यूं कर?

return super.onKeyDown(keyCode, event); 

फिर भी, असली वापस बटन के विपरीत, जब '' नकली कोड कहा जाता है:

KeyEvent goBackDown = new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK,0,0); 
    goBackDown.dispatch(activity); 
    SystemClock.sleep(50); // as if human pressed the key 
    KeyEvent goBackUp = new KeyEvent(0,0,KeyEvent.ACTION_UP,KeyEvent.KEYCODE_BACK,0,0); 
    goBackUp.dispatch(activity); 

मेरे गतिविधि के OnKeyDown() वर्तमान में केवल कॉल: मुझे लगता है कि निम्नलिखित कोड का उपयोग कर गतिविधि अदृश्य बनने से इनकार कर दिया।

क्यों?

उत्तर

11

उपयोग

dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK)); 

http://developer.android.com/reference/android/view/View.html#dispatchKeyEvent%28android.view.KeyEvent%29

+0

यह काम किया। धन्यवाद! अब मुझे समझने की जरूरत है क्यों। :-) – srf

+0

@ एसआरएफ 'सार्वजनिक अंतिम बूलियन प्रेषण (KeyEvent.Callback रिसीवर) 'बहिष्कृत है। 'सार्वजनिक अंतिम बूलियन प्रेषण (KeyEvent.Callback रिसीवर, KeyEvent.DispatcherState राज्य, ऑब्जेक्ट लक्ष्य)' सिद्धांत सिद्धांत में भी होना चाहिए, लेकिन मुझे इसका उपयोग करने का कोई अनुभव नहीं है। – Aleadam

+0

@Aleadam क्या हम यूनिकोड चार मान का उपयोग करके KeyEvent ऑब्जेक्ट बना सकते हैं? – smartkid

2

इस

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     //.... 
    } 
    return true; 
} 
+0

धन्यवाद लेकिन मैं पहले से ही ऐसा कर रहा हूं। जब मैंने लिखा "मेरा ऑनकेडाउन() वर्तमान में केवल सुपर कहता है" मैं केवल वर्णन को सरल बना रहा था। मैं वास्तव में Log.v() को LogDat पर KeyDown() में यह सत्यापित करने के लिए कि मेरा "नकली" ईवेंट वास्तव में बुलाया जा रहा है। यह है, लेकिन जब यह अदृश्य बनने के बिंदु तक पहुंच जाता है, तो यह नहीं होता है। – srf

3

Aleadam विधि का उपयोग कर प्रयास करें मेरी एंड्रॉयड 4.1.2 पर काम नहीं करते। तो मैं वर्कअराउंड लिखता हूं:

public void dispachBackKey() { 
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); 
} 
संबंधित मुद्दे