2012-01-02 31 views
16

मैं प्रोग्रामिंग रूप से एक Droid पर एक कुंजी प्रेस अनुकरण कैसे कर सकता हूं? मैं एक मैन्युअल कुंजी प्रेस की नकल करना चाहता हूं (Droid पर दिखाई दे रहा है कि कोई कुंजी दबा रहा है लेकिन यह प्रोग्रामेटिक रूप से किया जा रहा है)।एंड्रॉइड अनुकरण कुंजी प्रेस

IWindowManager से जुड़े समाधान हैं, लेकिन यह अब नए एसडीके में कोई विकल्प नहीं है।

+0

परीक्षण उपकरण, एप्लिकेशन को संशोधित करने के अलावा कुछ करने के लिए प्रतिक्रिया करने के लिए वास्तविक स्पर्श, और लिनक्स स्तर पर ईवेंट इंजेक्ट करने के लिए डिवाइस को "rooting" आपके 3 विकल्प हैं। –

उत्तर

32

आप इंस्ट्रूमेंटेशन, यानी उपयोग कर सकते हैं निम्नलिखित पर अपनी गतिविधि पर onCreate से बुलाया कोड का कारण होगा मेनू खोला करने के लिए किया जा और बंद कई बार:

new Thread(new Runnable() {   
     @Override 
     public void run() { 
      try { 
      Instrumentation inst = new Instrumentation(); 
      for (int i = 0; i < 10; ++i) { 
       inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 
       Thread.sleep(2000); 
       inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 
       Thread.sleep(2000); 
      } 
      } 
      catch(InterruptedException e){ 
      } 
     } 
    }).start(); 

... लेकिन मुझे यकीन नहीं कर रहा हूँ अगर यह है कि तुम क्या कर रहे हैं

+4

यह वही है जो मैं ढूंढ रहा हूं लेकिन ... परीक्षण के लिए सख्ती से उपकरण नहीं है? मैं एक ऐसे समाधान की तलाश में हूं जिसका उपयोग मैं लाइव ऐप में कर सकता हूं, परीक्षण नहीं कर रहा हूं। अग्रिम में धन्यवाद। – calcrisk33

+0

@ calcrisk33 मैं इस बारे में कोई जानकारी नहीं पा रहा हूं कि यह लाइव ऐप के लिए एक व्यवहार्य समाधान है या नहीं। क्या आपने इसका इस्तेमाल इस तरह से किया? – Kirk

+1

@ किर्क मैंने किया और यह एक महत्वपूर्ण स्ट्रोक/प्रेस सिमुलेट करने के लिए बहुत अच्छी तरह से काम किया। – calcrisk33

0

यदि आपके पास ऐसा दृश्य है जो ईवेंट का उपभोग करना चाहते हैं तो आप BaseInputConnection कक्षा और इसकी sendKeyEvent विधि का उपयोग कर सकते हैं।

इसका उपयोग करने के लिए आपको एक लक्ष्य दृश्य (उदाहरण के लिए एक संपादन टेक्स्ट) निर्दिष्ट करना होगा जो KeyEvent प्राप्त करेगा। उदाहरण के लिए:

EditText editText; 
BaseInputConnection inputConnection = new BaseInputConnection(editText, true); 
inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POUND)); 

इसका नतीजा यह है कि उपयोगकर्ता वास्तव में # कुंजी दबाएगा (संपादन टेक्स्ट को ध्यान में रखते हुए)।

0

तुम भी input text उपयोग कर सकते हैं, यानी:

कंप्यूटर से के माध्यम से adb:

adb shell input text 'example\\@email.com' 

से shell:

input text 'example\\@email.com'