5

मैं एक इनपुट विधि सेवा को कार्यान्वित करने की कोशिश कर रहा हूं जो रिमोट क्लाइंट द्वारा भेजे गए इरादों को प्राप्त करता है, और उन लोगों के जवाब में उचित कुंजीवेन्ट भेजता है।डायलॉग, या स्पिनर मेनू में इनपुट विधि सेवा के माध्यम से KeyEvents कैसे भेजें?

मैं input method service में इस विधि

private void keyDownUp(int keyEventCode) 
{ 
    getCurrentInputConnection().sendKeyEvent(
       new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode)); 
    getCurrentInputConnection().sendKeyEvent(
       new KeyEvent(KeyEvent.ACTION_UP, keyEventCode)); 
} 

उपयोग कर रहा हूँ KeyEventsSimple Sofykeyboard Sample में के रूप में भेजने के लिए, और यह घर में काम करता है, Activities. में .. लेकिन ऐसा नहीं होता काम करता है जब एक संवाद या एक स्पिनर का मेनू अग्रभूमि में है।

घटनाओं parent activity behind the Dialog को भेजा जाता है।

वहाँ किसी भी तरह से किसी इनपुट विधि से हार्डवेयर कुंजियों का उपयोग की तरह कुंजी भेजने के लिए और डिवाइस को नियंत्रित करने है? मैं क्या कर रहा हूँ पर

बेहतर स्पष्टीकरण:

मैं एक तरह से एक इनपुट मेथड कि दूरदराज से डिवाइस को नियंत्रित करने की अनुमति देता है writng कर रहा हूँ।

मैं एक ग्राहक में लिखने (मेरे डेस्कटॉप पीसी पर एक जावा आवेदन) (उदाहरण के "उत्तर प्रदेश" के लिए) एक आदेश, sendBroadcast() साथ डिवाइस पर एक सर्वर इनपुट विधि में जानकारी के साथ आशय, और एक रिसीवर को भेजता है keycode के साथ कुंजीडाउनअप को कॉल करें और यह आम तौर पर काम करता है, लेकिन जब मैं एक ऐप पर जाता हूं जो एक संवाद दिखाता है, तो keyDownUp विधि dialog पर कुंजी ईवेंट नहीं भेजती है, उदाहरण के लिए हाँ या नहीं चुनने के लिए बटन, लेकिन यह के पीछे activty को नियंत्रित करता रहता है।

Here मैं अपने एक ही समस्या के साथ किसी पाया है ... लेकिन कोई जवाब नहीं ...

उत्तर

1

सबसे पहले, मुझे समझाने मैं क्या समझ गए हैं।

  • आप कोई ऐप्लिकेशन
  • आपको लगता है कि गतिविधि में एक संवाद खोलने के लिए जाना
  • (उदाहरण के लिए SMS ऐप्लिकेशन पर, एक धागा देर तक दबाए जाने के) आप घर कुंजी दबाएँ।
  • एक अलग एप्लिकेशन पर जाएं जो इरादा भेजता है
  • आईएमई का इरादा मिलता है, और कुछ लिखता है।

मुझे समझ में नहीं आता कि संवाद के साथ गतिविधि फिर से कैसे खोली जाती है।

AFAIK, IME के ​​onKey(int primaryCode, int[] keyCodes) कहा जाता है और जब आप एक हार्ड की IME प्रेस में कहा जाता है कि जब आप softKeyboard में एक महत्वपूर्ण, प्रेस: ​​

  • public boolean onKeyUp(int keyCode, KeyEvent event)
  • public boolean onKeyDown(int keyCode, KeyEvent event)

आप इसके बजाय उन तरीकों को कॉल करने का प्रयास कर सकते हैं, लेकिन मुझे नहीं पता कि हार्ड कुंजी को अनुकरण करने से यह ठीक हो जाएगा। मुझे लगता है कि यह एक फोकस मुद्दा है। क्या आपने यह देखने के लिए getCurrentInputConnection() से टेक्स्ट प्राप्त करने का प्रयास किया था?

+0

मैंने अपनी समस्या को स्पष्ट करने की कोशिश कर अपना प्रश्न संपादित किया है कि मेरी समस्या क्या है। आपके उदाहरण में जब मैं एसएमएस ऐप में संवाद खोलता हूं, अगर मैं DPAD_DOWN कुंजी के लिए नीचे आदेश भेजता हूं, तो यह स्क्रॉल करने के लिए अग्रभूमि में संवाद नहीं करता है, लेकिन यह पीछे की गतिविधि को भेजा जाता है, जो दिखाता है संदेश सूची, उस संदेश के नीचे का चयन करना जिसे मैंने लंबे समय तक दबाया था, संवाद को बंद करना असंभव बना रहा था। मैंने केडडाउन और ऑनअप पर कॉल करने का प्रयास किया है, लेकिन वे काम नहीं करते हैं और जहां कुंजीडाउनअप काम करता है। – shutdown11

+0

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

+0

हार्ड कुंजी निश्चित रूप से इंस्ट्रुमेंटेशन क्लास के साथ अनुकरण किया जा सकता है, लेकिन रूट डिवाइस की आवश्यकता है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^