android模拟点击事件
❶ android怎么模拟点击而不受控制
本文讲的是通过使用代码,可以控制手机的屏幕和物理按键,也就是说不只是在某一个APP里去操作,而是整个手机系统。
更多问题解决办法请参考android学习手册,例子、源码、文档全部搞定,采用androidstudo的目录结构,360手机助手中下载。下面是截图。
getevent/sendevent
getevent&sendevent 是Android系统下的一个工具,可以模拟多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。getevent用于获取当前系统input设备的一些参数和实时事件的数据;sendevent用于发送input事件,这俩命令的作用就是相当于解放了手,可以通过命令直接调用Linux底层来控制手机,工具的源码位于Android SDK的system/core/toolbox下(sendevent.c getevent.c)。
getevent
用法说明:
[plain] view plain print?
#getevent-h
Usage:getevent[-t][-n][-sswitchmask][-S][-v[mask]][-p][-q][-ccount][-r][device]
-t:showtimestamps
-n:don'tprintnewlines
-s:printswitchstatesforgivenbits
-S:printallswitchstates
-v:verbositymask(errs=1,dev=2,name=4,info=8,vers=16,pos.events=32)
-p:showpossibleevents(errs,dev,name,pos.events)
-q:quiet(clearverbositymask)
-c:
-r:printrateeventsarereceived
# getevent -h
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-p] [-q] [-c count] [-r] [device]
-t: show time stamps
-n: don't print newlines
-s: print switch states for given bits
-S: print all switch states
-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32)
-p: show possible events (errs, dev, name, pos. events)
-q: quiet (clear verbosity mask)
-c: print given number of events then exit
-r: print rate events are received
其中[-t]参数显示事件的时间戳,[-n]取消事件显示时的换行符,[-s switchmask]得到指定位的开关状态,[-S]得到所有开关的状态,[-v [mask]]根据mask的值显示相关信息,后面详细介绍mask的使用方法,[-p]显示每个设备支持的事件类型和编码,[-q]只显示事件数据,[-c count]只显示count次事件的数据,[-r]显示事件接收频率。
[java] view plain print?
shell@android:/$getevent-p
shell@android:/ $ getevent -p
[java] view plain print?
getevent-p
adddevice1:/dev/input/event7
name:"gpio-keys"
events:
KEY(0001):0066
inputprops:
<none>
adddevice2:/dev/input/event2
name:"alps"
events:
ABS(0003):0000:value12,min-4096,max4096,fuzz0,flat0,resolution0
0001:value-4,min-4096,max4096,fuzz0,flat0,resolution0
0002:value-252,min-4096,max4096,fuzz0,flat0,resolution0
000a:value0,min-4096,max4096,fuzz0,flat0,resolution0
0010:value0,min-4096,max4096,fuzz0,flat0,resolution0
0011:value0,min-4096,max4096,fuzz0,flat0,resolution0
inputprops:
<none>
adddevice3:/dev/input/event6
name:"7k_handset"
events:
KEY(0001):006b00720073007400e2
inputprops:
<none>
adddevice4:/dev/input/event5
name:"proximity_sensor"
events:
ABS(0003):0019:value1,min0,max1,fuzz0,flat0,resolution0
inputprops:
<none>
adddevice5:/dev/input/event4
name:"accelerometer_sensor"
events:
inputprops:
<none>
adddevice6:/dev/input/event3
name:"magnetic_sensor"
events:
inputprops:
<none>
adddevice7:/dev/input/event1
name:"7x27a_kp"
events:
KEY(0001):00720073
inputprops:
<none>
adddevice8:/dev/input/event0
name:"sec_touchscreen"
events:
KEY(0001):0066008b009e00d9
ABS(0003):002f:value0,min0,max4,fuzz0,flat0,resolution0
0030:value0,min0,max255,fuzz0,flat0,resolution0
0032:value0,min0,max100,fuzz0,flat0,resolution0
0035:value0,min0,max480,fuzz0,flat0,resolution0
0036:value0,min0,max800,fuzz0,flat0,resolution0
0039:value0,min0,max4,fuzz0,flat0,resolution0
LED(0011):0008
inputprops:
INPUT_PROP_DIRECT
getevent -p
add device 1: /dev/input/event7
name: "gpio-keys"
events:
KEY (0001): 0066
input props:
<none>
add device 2: /dev/input/event2
name: "alps"
events:
ABS (0003): 0000 : value 12, min -4096, max 4096, fuzz 0, flat 0, resolution 0
0001 : value -4, min -4096, max 4096, fuzz 0, flat 0, resolution 0
0002 : value -252, min -4096, max 4096, fuzz 0, flat 0, resolution 0
000a : value 0, min -4096, max 4096, fuzz 0, flat 0, resolution 0
0010 : value 0, min -4096, max 4096, fuzz 0, flat 0, resolution 0
0011 : value 0, min -4096, max 4096, fuzz 0, flat 0, resolution 0
input props:
<none>
add device 3: /dev/input/event6
name: "7k_handset"
events:
KEY (0001): 006b 0072 0073 0074 00e2
input props:
<none>
add device 4: /dev/input/event5
name: "proximity_sensor"
events:
ABS (0003): 0019 : value 1, min 0, max 1, fuzz 0, flat 0, resolution 0
input props:
<none>
add device 5: /dev/input/event4
name: "accelerometer_sensor"
events:
input props:
<none>
add device 6: /dev/input/event3
name: "magnetic_sensor"
events:
input props:
<none>
add device 7: /dev/input/event1
name: "7x27a_kp"
events:
KEY (0001): 0072 0073
input props:
<none>
add device 8: /dev/input/event0
name: "sec_touchscreen"
events:
KEY (0001): 0066 008b 009e 00d9
ABS (0003): 002f : value 0, min 0, max 4, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0032 : value 0, min 0, max 100, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 480, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 800, fuzz 0, flat 0, resolution 0
0039 : value 0, min 0, max 4, fuzz 0, flat 0, resolution 0
LED (0011): 0008
input props:
INPUT_PROP_DIRECT
可以看到 [-p] 参数显示出来当前系统存在的所有input设备,并且把每个设备支持的事件类型以及编码都列举了出来。
每一个device相当于手机所支持的input设备,每个device里面的events下:KEY(0001) 、ABS(0003)、SYN(0000)等表示该设备所支持的事件类型:EV_SYN[0000] (同步事件),EV_KEY[0001] (按键事件),EV_ABS[0003] (绝对值事件)
举例event0中的KEY类型:
[java] view plain print?
KEY(0001):0066008b009e00d9
KEY(0001):0066008b009e00d9
表示sec_touchscreen支持的按键编码有:KEY_HOME[0066] (HOME键),KEY_MENU[008b] (MENU键)
KEY_BACK[009e] (BACK键),KEY_SEARCH[00d9] (SEARCH键)
举例event0中的ABS类型:
❷ Android框架 ImageButton如何实现 按住和松开时的事件
这个可以用onTouch来实现,touch事件有手指按下,移动,放开的相关api。
关于Touch事件的说明:
1.关于事件构成
在Android中,事件主要包括点按、长按、拖拽、滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作。所有这些都构成了Android中的事件响应。总的来说,所有的事件都由如下三个部分作为基础:
1.按下(ACTION_DOWN)
2.移动(ACTION_MOVE)
3.抬起(ACTION_UP)
所有的操作事件首先必须执行的是按下操作(ACTIONDOWN),之后所有的操作都是以按下操作作为前提,当按下操作完成后,接下来可能是一段移动(ACTIONMOVE)然后抬起(ACTION_UP),或者是按下操作执行完成后没有移动就直接抬起。这一系列的动作在Android中都可以进行控制。
2.事件的处理API
在View和ViewGroup中都存在dispatchTouchEvent和onTouchEvent方法,但是在ViewGroup中还有一个onInterceptTouchEvent方法,在Android中,所有的事件都是从开始经过传递到完成事件的消费,这些方法的返回值就决定了某一事件是否是继续往下传,还是被拦截了,或是被消费了。
public boolean dispatchTouchEvent(MotionEvent event)
public boolean onTouchEvent(MotionEvent event)
public boolean onInterceptTouchEvent(MotionEvent event)
3.事件处理API的说明
dispatchTouchEvent方法用于事件的分发,Android中所有的事件都必须经过这个方法的分发,然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回true表示不继续分发,事件没有被消费。返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。
onTouchEvent方法用于事件的处理,返回true表示消费处理当前事件,返回false则不处理,交给子控件进行继续分发。
onInterceptTouchEvent是ViewGroup中才有的方法,View中没有,它的作用是负责事件的拦截,返回true的时候表示拦截当前事件,不继续往下分发,交给自身的onTouchEvent进行处理。返回false则不拦截,继续往下传。
❸ android 如何模拟 自动点击某个定点坐标
在Android中有时需要模拟某一个View的touch事件,来达到对该View的功能相应处理的简单化,因为你只需要模拟对该View的touch事件,便能沿着原来touch的事件相应走下去,不需要添加任何代码,你可以这么做:
从代码可以看出这里的重点是需要知道两个点:一是你模拟点击的坐标,在这里就是x和y,二就是你需要设置响应这个点击事件的View,这里是一个SeekBar,这个点击的坐标一般也选在这个需要响应View上,我的使用场景是在遥控器的确定键的相应上,如果还有新的应用场景,请多交流哦。
❹ 如何绑定android点击事件
绑定android点击事件需要在该空间添加android:onClick="click"属性(click是为事件的方法),具体操作步骤如下:
1、使用Android studio创建一个Android项目,如下图:
❺ android sendevent模拟滑动点击事件
adb shell input swipe 250 250 300 300
模拟事件全部是通过input命令来实现的,首先看一下input命令的使用:
usage: input ...
具体请查阅 <android keycode详解> http://blog.csdn.net/huiguixian/article/details/8550170
然后使用的话比较简单,比如想模拟home按键:
adb shell input keyevent 3
请查阅上述文章,根据具体keycode编辑即可。
此x、y坐标对应的是真实的屏幕分辨率,所以要根据具体手机具体看,比如你想点击屏幕(x, y) = (250, 250)位置:
adb shell input tap 250 250
adb shell input swipe 250 250 300 300
在项目中实现陀螺仪翻页的解决策略
竖屏
向右滑 :input swipe 50 1000 650 1000 ->
向左滑: input swipe 650 1000 50 1000 <-
横屏
默认点击屏幕在横屏状态下的中心位置 input tap 627 283 (可以完成例如在相册页面的)
向右滑 :input swipe 600 300 800 300 -> (适用于小范围的移动。 例如相册的展示页面)
向左滑 :input swipe 800 300 60 300 <- (适用于小范围的移动。 例如相册的展示页面)
向右滑 :input swipe 200 300 1200 300 -> (适用于大范围的移动。 例如相册的单张浏览模式)
向右滑 :input swipe 1200 300 200 300 <- (适用于大范围的移动。 例如相册的单张浏览模式)
superbar中使用命令在不申请root的条件下打开设备文件节点的权限
打开设备文件节点的权限:chmod 666 /dev/input/*
查看设备文节点的权限: ll /dev/input
android RingSDK 的事件注入
https://code.google.com/p/android-event-injector/
ps:在没有OTG线的情况下连接电脑,通过命令打开任意的app
adb shell am start com.wormhole.glass1/com.wormhole.glass.MainActivit
❻ 如何绑定android点击事件
绑定Android点击事件有三种方式:
一、匿名内部类
1、通过资源ID找到对应的Android控件,比如R.id.button1
Button button1 = (Button)findViewById(R.id.button1);
2、调用setOnClickListener方法,将点击事件与之绑定
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//这里放点击事件的逻辑
}
});
二、XML申明式
1、在对应的布局文件中添加一个按钮,即Button
2、在Button中添加 onClick="foo()" 属性
3、在对应的Activity中编写对应的foo()方法,如下:
public void foo(View v){
//这里放点击事件的逻辑
//这里的 " v " 是指当前组件,就是你点击的这个按钮
}
三、统一处理式
1、使对应的Activity类实现View.OnClickListener 接口,也就是这样写:
public class xxActivity implement View.OnClickListener {
2、在方法中重载onClick(View v)方法
public void onClick(View v){
3、通过 v.getId() 来判断,来源是哪一个按钮,这里可以放一个switch开关语句,来进行逻辑的分工。
}
}
纯手打,希望上文能对你起到一定的辅助作用。
❼ android textview或者LinearLayout的双击事件怎么做
这个我实现了,但是也是用记录上次点击时间的方法,代码给你看下。
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.TextView;
importcom.sinovoice.test.R;
{
privatestaticfinalStringTAG="DoubleClickActivity";
privateintclickCount;
privatelongpreClickTime;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextViewtv=(TextView)findViewById(R.id.tv_main);
clickCount=0;
tv.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
if(clickCount==0){
preClickTime=System.currentTimeMillis();
clickCount++;
}elseif(clickCount==1){
longcurTime=System.currentTimeMillis();
if((curTime-preClickTime)<500){
doubleClick();
}
clickCount=0;
preClickTime=0;
}else{
Log.e(TAG,"clickCount="+clickCount);
clickCount=0;
preClickTime=0;
}
}
});
}
privatevoiddoubleClick(){
Log.i(TAG,"doubleclick");
}
}