मैन्युअल रूप से एक्स और वाई निर्देशांक देते समय एंड्रॉइड के साथ एक स्पर्श घटना का अनुकरण कैसे करें?
मैन्युअल रूप से एक्स और वाई निर्देशांक देते समय एंड्रॉइड के साथ एक स्पर्श घटना का अनुकरण कैसे करें?
जवाबों:
यदि आपने अपना विचार बढ़ा दिया है, तो वैलेंटाइन रोचर का तरीका काम करता है, लेकिन यदि आप एक इवेंट श्रोता का उपयोग कर रहे हैं, तो इसका उपयोग करें:
view.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
Toast toast = Toast.makeText(
getApplicationContext(),
"View touched",
Toast.LENGTH_LONG
);
toast.show();
return true;
}
});
// Obtain MotionEvent object
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
float x = 0.0f;
float y = 0.0f;
// List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(
downTime,
eventTime,
MotionEvent.ACTION_UP,
x,
y,
metaState
);
// Dispatch touch event to view
view.dispatchTouchEvent(motionEvent);
MotionEvent ऑब्जेक्ट प्राप्त करने के बारे में अधिक जानकारी के लिए, यहाँ एक उत्कृष्ट उत्तर दिया गया है: Android: MotionEvent कैसे बनाएं?
downTime
वह समय होगा जब उपयोगकर्ता स्क्रीन पर टच करेगा, जबकि eventTime
इस मामले में होगा जब उपयोगकर्ता अपनी उंगली उठाता है ( ACTION_UP
)। मुझे यकीन नहीं है कि अगर दोनों समान हैं तो भी यह काम करेगा। आप इसका परीक्षण कर सकते हैं और अपने परिणाम पोस्ट कर सकते हैं।
यहाँ एक मंकी स्क्रिप्ट है जो एक एप्लीकेशन को टच और ड्रग्स भेजता है। मैं यह परीक्षण करने के लिए उपयोग कर रहा हूं कि मेरा आवेदन तेजी से दोहराए जाने वाले स्वाइप इशारों को संभाल सकता है।
# This is a monkeyrunner jython script that opens a connection to an Android
# device and continually sends a stream of swipe and touch gestures.
#
# See http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html
#
# usage: monkeyrunner swipe_monkey.py
#
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Connects to the current device
device = MonkeyRunner.waitForConnection()
# A swipe left from (x1, y) to (x2, y) in 2 steps
y = 400
x1 = 100
x2 = 300
start = (x1, y)
end = (x2, y)
duration = 0.2
steps = 2
pause = 0.2
for i in range(1, 250):
# Every so often inject a touch to spice things up!
if i % 9 == 0:
device.touch(x2, y, 'DOWN_AND_UP')
MonkeyRunner.sleep(pause)
# Swipe right
device.drag(start, end, duration, steps)
MonkeyRunner.sleep(pause)
# Swipe left
device.drag(end, start, duration, steps)
MonkeyRunner.sleep(pause)
MonkeyDevice.DOWN_AND_UP
इसके बजाय उपयोग करना चाहिए 'DOWN_AND_UP'
। ( DOWN_AND_UP
डिफ़ॉल्ट है, इसलिए आपका कोड अभी भी काम करता है)
UP
कार्रवाई के बाद रिबूट करता है
स्पर्श घटना का अनुकरण करने के लिए adb शेल कमांड का उपयोग करें
adb shell input tap x y
and also
adb shell sendevent /dev/input/event0 3 0 5
adb shell sendevent /dev/input/event0 3 1 29
यदि मैं स्पष्ट रूप से समझता हूं, तो आप इस कार्यक्रम को करना चाहते हैं। उसके बाद, आप अपनी आवश्यकता के निर्देशांक के साथ onTouchEvent विधि का उपयोग कर सकते हैं View
और बना MotionEvent
सकते हैं।
आपको नए बंदर को एक जाना चाहिए। हो सकता है कि यह आपकी समस्याओं को हल कर सकता है। आप इसमें टेस्टिंग के लिए कीकोड लगाते हैं, हो सकता है कि टच इवेंट भी संभव हो।
adb shell monkey
है monkeyrunner
, जो कि एक अलग उपकरण है।
बंदर स्क्रिप्ट का उपयोग करते समय मैंने देखा कि डिस्पैचप्रेस (KEYCODE_BACK) कुछ भी नहीं कर रहा है जो वास्तव में चूसना है। कई मामलों में यह इस तथ्य के कारण है कि गतिविधि कुंजी घटना का उपभोग नहीं करती है। इस समस्या का हल एक क्रम में बंदर स्क्रिप्ट और एडीबी शेल इनपुट कमांड के मिश्रण का उपयोग करना है।
1 बंदर स्क्रिप्ट का उपयोग करते हुए कुछ महान समय पर नियंत्रण दिया गया। गतिविधि के लिए एक निश्चित मात्रा में दूसरी प्रतीक्षा करें और एक अवरोधी अदब कॉल है।
2 अंत में एडीबी शेल इनपुट कीवेंट 4 भेजने से एपीके चालू हो जाएगा।
ईजी
adb शेल बंदर -p com.my.application -v -v -v -f /sdcard/monkey_script.txt 1
adb शेल इनपुट कीवेंट 4