Android應用防止模擬點選,防範搶紅包類似外掛的方法
模擬點選原理,及如何防止模擬點選
所有實現模擬點選功能的應用,都是基於Android輔助功能來實現的。
閱讀下面內容前,最好先了解一下模擬點選的原理。
Android的View中,有這麼一個方法:performAccessibilityAction,這個方法用來處理AccessibilityService發來的Accessibility事件,其中就包括AccessibilityNodeInfo.ACTION_CLICK、AccessibilityNodeInfo.ACTION_LONG_CLICK這兩個事件。
View對這兩個事件的預設處理方法,就是呼叫performClick方法。而performClick方法,熟悉View觸控事件分發流程的同學都知道,在這個方法裡,會呼叫View的OnclickListener中的onClick方法。
所以我們只需要重寫View的performAccessibilityAction方法,過濾掉AccessibilityNodeInfo.ACTION_CLICK、AccessibilityNodeInfo.ACTION_LONG_CLICK這兩個事件即可。注意,萬不可把其他事件也過濾掉,因為這樣會導致這個View無法支援輔助功能,影響視覺障礙者的使用者體驗。
重寫程式碼如下:
@Override public boolean performAccessibilityAction(View host, int action, Bundle args) { //忽略AccessibilityService傳過來的點選事件以達到防止模擬點選的目的 if (action == AccessibilityNodeInfo.ACTION_CLICK || action == AccessibilityNodeInfo.ACTION_LONG_CLICK) { return true; } return super.performAccessibilityAction(host, action, args); }
然而我們總不能為應用中每個用到的View都重寫一遍這個方法,所以我們可以為View新增AccessibilityDelegate來實現。
為View新增AccessibilityDelegate
AccessibilityDelegate是View的輔助功能代理類,View有的Accessibility處理方法它也都有,因此我們可以為View設定AccessibilityDelegate並重寫其中的performAccessibilityAction方法來實現防止模擬點選的目的。
contentView.setAccessibilityDelegate(new View.AccessibilityDelegate() { @Override public boolean performAccessibilityAction(View host, int action, Bundle args) { //忽略AccessibilityService傳過來的點選事件以達到防止模擬點選的目的 if (action == AccessibilityNodeInfo.ACTION_CLICK || action == AccessibilityNodeInfo.ACTION_LONG_CLICK) { return true; } return super.performAccessibilityAction(host, action, args); } });
相關推薦
Android應用防止模擬點選,防範搶紅包類似外掛的方法
模擬點選原理,及如何防止模擬點選 所有實現模擬點選功能的應用,都是基於Android輔助功能來實現的。 閱讀下面內容前,最好先了解一下模擬點選的原理。 Android的View中,有這麼一個方法:performAccessibilityAction,這個方法用
模擬點選,滑鼠移動,拖拽,按鍵,下拉框的處理
1.模擬點選 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from time import sleep driver = webdriver.Chrom
python selenium的模擬點選,模擬滑動等操作
http://blog.csdn.net/nhudx061/article/details/43601065 #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action
Android模擬點選螢幕,實現按鍵精靈點選螢幕功能
我在實現安卓模擬點選螢幕固定位置時嘗試了很多方法,碰了不少壁,現在我將我實現的方法分享給大家,以及我嘗試過的方法也分享給大家,讓大家在開發的路上少走些彎路。 首先我嘗試用安卓輔助功能AccessibilityService類實現模擬螢幕點選,但是這個類只能找到頁面的控制元件,然後對控制元件進行模
【js】js模擬點選a標籤,觸發href
js中的$(...).click()事件只能觸發繫結的onClick方法,不能跳轉到href。 常規情況下如果想下如果想在js裡跳轉href的連結,會先用attr獲取到href屬性的值,然後window.location.href跳轉,但是現在想利用a標籤的download屬性實現下載功能,如果
scrapy+selenium中關於同一個頁面模擬點選後,開啟新的標籤頁,切換到新頁面的方法
windows = spider.browser.current_window_handle # 定位當前頁面控制代碼 time.sleep(5) target = spider.browser.find_element_by_id("toolber-keyword") keyword
Android模擬點選的四種方式
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android ,MVP+retrofit +rxjava+glide recyclerview使用詳解 ,條目點選 長按點選,三種管理器 ,分割線
首先是對應的依賴 implementation 'com.android.support:recyclerview-v7:26.1.0' 下面是對應的介面卡 裡面對應的 有點選的註釋 public class HomeAdaper extends RecyclerV
android adb 模擬點選、滑動、輸入、按鍵的操作
//模擬輸入“001” adb shell input text “001” //模擬home按鍵 adb shell input keyevent 3 //模擬點選(540, 1104)座標 adb shell input tap 540 1104
js或者jQuery模擬點選提交按鈕button,觸發提交操作
一般情況下提交form表單,都是手動點選提交按鈕,但是為了簡化使用者操作,有時候需要自動提交表單,或者做了其他某一個操作(非提交操作)之後自動提交表單,可以使用js或者jQuery模擬點選提交按鈕,然後提交,觸發提交操作 不只是提交表單,其他需要點選的時候都可以這麼寫,不用人手動點選而達到手
【Windows10】點選cortana無反應,很多應用圖片灰色點選無反應解決方法
在windows10使用過程中,經常出現點選小娜cortana無反應的情況,或者出現以下圖片(右側計算機)情況,某些windows自帶應用是灰色的點選圖示就會提示XXX 出現問題,請你聯絡系統管理員等字樣。 解決方法: 第一步:開啟Windows10防火牆。 第二步:
利用Runtime來攔截UIButton的點選事件,防止重複點選
對於公司原來的一些程式碼,想對UIButton的點選事件做一部分修改,但是如果使用繼承出來的UIBtton來解決的話, 又要改大量的程式碼,這時候,使用runtime攔截替換髮送點選事件的方法可以迅速解決這個問題,超級給力! 不廢話,直接上程式碼 #im
android 點選EditText彈鍵盤,點選其他控制元件收鍵盤不觸發點選事件,特1控制元件收鍵盤觸發點選,特2控制元件點選不收鍵盤
說實話開發android,鍵盤真的很不聽話,非常難用,於是百度找到dispatchTouchEvent進行重寫可完成鍵盤收放,但還是不夠完美,我期望的功能如下: 1.基礎功能: a.點選輸入控制元件彈出鍵盤 b.點選非輸入控制元件收起鍵盤 2.特殊功能1
jquery a標籤不可點選,繫結bind/解除unbind點選,ajax防止重複提交
方法1 (繫結bind/解除unbind點選): <a href="javascript:void(0)" id="dianji">點選</a> <br/><
Android通知之通知欄點選通知後返回正在執行的程式,而不是一個新Activity
一般的寫法,點選通知欄進入的Activity是一個新建立的Activity,而不是原先正在執行的Activity,這和我的想法是背道而馳的。當你點選返回按鍵退出這個Activity之後,發現,原先正在執行的Activity終於出現了。明顯這樣是不符合條理的。
Android 按鍵防止過快點選(防抖),在ButterKnife中的簡單解決方案。
其實自己也在網上找了一些防抖的方案,比如RxBinding啊,NoDoubleClickListener啊,原始解決方案啊等等,不過那都不是我想要的。 因為專案中使用了ButterKnife繫結控制元件和為控制元件註冊點選事件。所以上面搜到的那些方案都不太好使
Android防止快速點選造成的錯誤
在測試的時候,我們經常可能會對一個控制元件進行多次的觸發,快速點選多次同一個按鈕,那麼就會多次觸發這個按鈕的監聽。這其實不是我們想要的結果。 如何解決,下面給出解決方法。 弄一個防止快速點選的Utils: public class NoDoubleClick {
Android Instrumentation 模擬點選、拖拽、傳送keycode、焦點異常丟失。
Instrumentation模擬點選,拖拽,向系統傳送keycode。 需要注意的幾點: Android系統座標系,X軸正方向為右,Y軸正方向為下(與數學座標系相反) 所有事件在傳送時均需要在Thread中執行,否則會報異常。 模擬輸入法種特殊
Android防止重複點選開啟多個頁面
新建NoDoubleClickListener import android.view.View; import java.util.Calendar; public abstract class
android selector 背景選擇器的使用, button (未點選,點選,選中保持狀態)效果實現
<ImageButton android:layout_marginRight="15dp" android:background="@null" android:id="@+id/stop"