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");
}
}