[英]ADB and Android App communication mode
我正在使用从adb控制台定时控制的应用程序。 “ adb shell sendevent”命令控制应用的触摸事件。 但是这个触摸事件是定时的,值得推荐
import os
apkLocation = "/Users/siddharthan64/Desktop/adt/sdk/platform-tools/"
os.chdir(apkLocation)
cmdList = ['./adb shell sendevent /dev/input/event2: 3 53 251','./adb shell sendevent / dev/input/event2: 3 54 399','./adb shell sendevent /dev/input/event2: 3 48 10','./adb shell sendevent /dev/input/event2: 3 50 7','./adb shell sendevent /dev/input/event2: 0 2 0']
cmdList.append['./adb shell sendevent /dev/input/event2: 3 50 7']
cmdList.append[,'./adb shell sendevent /dev/input/event2: 0 2 0']
cmdList.append['./adb shell sendevent /dev/input/event2: 0 0 0']
cmdList.append['./adb shell sendevent /dev/input/event2: 3 57 0']
cmdList.append['./adb shell sendevent /dev/input/event2: 3 53 251']
cmdList.append['./adb shell sendevent /dev/input/event2: 3 54 399']
cmdList.append['./adb shell sendevent /dev/input/event2: 3 48 0']
cmdList.append['./adb shell sendevent /dev/input/event2: 3 50 0']
cmdList.append['./adb shell sendevent /dev/input/event2: 0 2 0']
cmdList.append['./adb shell sendevent /dev/input/event2: 0 0 0']
for tcmd in cmdList:
p = os.popen(tcmd,"r")
在应用上发生特定事件时发送。
实际上, sendevent
因设备而sendevent
。 这是根据我的个人经验。 如果您尝试模拟触摸事件,则可以使用Android中的Instrumentation
概念。
因此,您需要有一个BroadcastReceiver
,它可以从adb
shell接收输入的触摸坐标。
以下是具有检测代码的BroadcastReceiver
的代码:
public void onReceive(Context arg0, Intent i) {
// TODO Auto-generated method stub
//Toast.makeText(arg0, "Broadcast intent received...", Toast.LENGTH_SHORT).show();
String args=i.getStringExtra("vals");
String[] arr=args.split(" ");
final int myVal1=Integer.parseInt(arr[0]);
final int myVal2=Integer.parseInt(arr[1]);
//Toast.makeText(arg0, "vals:"+args, Toast.LENGTH_SHORT).show();
//Toast.makeText(arg0, "myVal1="+myVal1+"\nmyVal2="+myVal2, Toast.LENGTH_SHORT).show();
Thread myThread=new Thread()
{
public void run() {
Instrumentation myInst = new Instrumentation();
myInst.sendKeyDownUpSync( KeyEvent.KEYCODE_B );
myInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,myVal1, myVal2, 0));
myInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,myVal1, myVal2, 0));
};
};
myThread.start();
}
您需要在manifest
注册BroadcastReceiver
,如下所示:
<receiver android:name="MyReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</receiver>
应用启动后,以调试模式连接设备,在命令提示符下,输入以下命令:
adb shell am broadcast --es vals "10 20" -n com.pkgName.appName/com.pkgName.appName.MyReceiver
上面的命令将触发您的应用程序的BroadcstReceiver
,并且将在坐标(10,20)处模拟触摸。 您可以将其替换为所需的值。
注意:如果将应用程序最小化,并且您正在尝试模拟触摸事件,则该应用程序将被强制关闭,因为android开发人员限制了这种未来,因为它很容易被黑客滥用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.