Android實現屏蔽微信拉黑和刪除聯繫人功能

實現效果:html

讓微信永遠彈不出那個刪除的對話框不就至關於屏蔽掉該功能了嗎?哈哈效果如圖:node

            

 

實現原理:android

一樣是利用AccessibilityService輔助服務,關於這個服務類還不瞭解的同窗能夠先看下我前兩篇的博客,原理都同樣:微信

http://www.cnblogs.com/cxk1995/p/6363574.html(搶紅包)ide

http://www.cnblogs.com/cxk1995/p/6366273.html(監聽微信聊天)佈局

1.咱們知道,其實微信每次刪除聯繫人都會彈出此頁面學習

 

2.若是你對AccessibilityService有過了解或者有看過我以前的兩篇博客,你會知道,其實每次彈出這個框,都會觸發AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED這個事件,因此咱們只要在每次觸發該事件的時候進行判斷當前頁面是否是處於刪除聯繫人對話框,若是是,咱們模擬點擊取消按鈕。思路什麼的其實都很簡單,能夠直接看下代碼:this

package com.cxk.wechatdeletefail;

import android.accessibilityservice.AccessibilityService;
import android.content.Intent;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Toast;

/**
 * Created by cxk on 2017/2/9.
 * <p>
 * email:471497226@qq.com
 * <p>
 * 屏蔽微信"刪除聯繫人"和"拉黑"功能
 */

public class DeleteFailService extends AccessibilityService {

    /**
     * 判斷是否是刪除聯繫人彈框
     */
    private boolean isDeleteDialog;
    /**
     * 判斷是否是拉黑聯繫人彈框
     */
    private boolean isDefriendDialog;

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        int eventType = event.getEventType();
        switch (eventType) {
            //進入聊天頁面會觸發該事件
            case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
                //獲取當前聊天頁面根佈局
                AccessibilityNodeInfo rootNode = getRootInActiveWindow();
                //屏蔽微信"刪除聯繫人"和"拉黑"功能
                DeleteFail(rootNode);
                break;

        }

    }

    /**
     * 遍歷全部控件,判斷是否是刪除聯繫人界面或者拉黑界面,若是是則模擬點擊"取消",讓它消失。
     *
     * @param rootNode
     */
    private void DeleteFail(AccessibilityNodeInfo rootNode) {
        if(rootNode!=null){
            for (int i = 0; i < rootNode.getChildCount(); i++) {
                AccessibilityNodeInfo node = rootNode.getChild(i);
                //判斷是否是刪除聯繫人彈出框
                if("android.widget.TextView".equals(node.getClassName().toString())){
                    if(!TextUtils.isEmpty(node.getText())){
                        if(node.getText().toString().contains("將同時刪除與該聯繫人的聊天記錄")){
                            isDeleteDialog=true;
                        }
                    }
                }

                //判斷是否是拉黑聯繫人彈出框
                if("android.widget.TextView".equals(node.getClassName().toString())){
                    if(!TextUtils.isEmpty(node.getText())){
                        if(node.getText().toString().contains("你將再也不收到對方的消息,而且大家相互看不到對方朋友圈的更新")){
                            isDefriendDialog=true;
                        }
                    }
                }

                //模擬點擊取消按鈕讓對話框消失
                if("android.widget.Button".equals(node.getClassName().toString())){
                    if(isDeleteDialog||isDefriendDialog){
                        if(!TextUtils.isEmpty(node.getText())){
                            if(node.getText().toString().equals("取消")){
                                node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * 必須重寫的方法:系統要中斷此service返回的響應時會調用。在整個生命週期會被調用屢次。
     */
    @Override
    public void onInterrupt() {
        Toast.makeText(this, "我快被終結了啊-----", Toast.LENGTH_SHORT).show();
    }

    /**
     * 服務開始鏈接
     */
    @Override
    protected void onServiceConnected() {
        Toast.makeText(this, "服務已開啓", Toast.LENGTH_SHORT).show();
        super.onServiceConnected();
    }

    /**
     * 服務斷開
     *
     * @param intent
     * @return
     */
    @Override
    public boolean onUnbind(Intent intent) {
        Toast.makeText(this, "服務已被關閉", Toast.LENGTH_SHORT).show();
        return super.onUnbind(intent);
    }
}

使用方法:spa

設置-輔助功能-無障礙-點擊WechatDeletefail開啓便可(或者在設置中查找輔助功能等)code

 

寫在最後:

AccessibilityService服務類很好玩,若是你對他了解的話其實能夠作不少事哈哈。

其實這只是一個小例子而已,例如你想讓微信加不了好友或者發不了紅包等等其實都跟上面的方法相似。

我的興趣研究,不建議用在非法途徑上!!

歡迎一塊兒討論學習:471497226@qq.com

相關文章
相關標籤/搜索