1. 程式人生 > >Android應用防止模擬點選,防範搶紅包類似外掛的方法

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/解除unbindajax防止重複提交

方法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"