Android實現(xiàn)屏蔽微信拉黑和刪除聯(lián)系人功能示例
Android實現(xiàn)屏蔽微信拉黑和刪除聯(lián)系人功能,廢話不多說,具體如下:
實現(xiàn)效果:
讓微信永遠彈不出那個刪除的對話框不就相當于屏蔽掉該功能了嗎?哈哈效果如圖:

實現(xiàn)原理:
1.我們知道,其實微信每次刪除聯(lián)系人都會彈出此頁面

2.如果你對AccessibilityService有過了解或者有看過我之前的兩篇博客,你會知道,其實每次彈出這個框,都會觸發(fā)AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED這個事件,所以我們只要在每次觸發(fā)該事件的時候進行判斷當前頁面是不是處于刪除聯(lián)系人對話框,如果是,我們模擬點擊取消按鈕。思路什么的其實都很簡單,可以直接看下代碼:
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.
* 屏蔽微信"刪除聯(lián)系人"和"拉黑"功能
*/
public class DeleteFailService extends AccessibilityService {
/**
* 判斷是不是刪除聯(lián)系人彈框
*/
private boolean isDeleteDialog;
/**
* 判斷是不是拉黑聯(lián)系人彈框
*/
private boolean isDefriendDialog;
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
switch (eventType) {
//進入聊天頁面會觸發(fā)該事件
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
//獲取當前聊天頁面根布局
AccessibilityNodeInfo rootNode = getRootInActiveWindow();
//屏蔽微信"刪除聯(lián)系人"和"拉黑"功能
DeleteFail(rootNode);
break;
}
}
/**
* 遍歷所有控件,判斷是不是刪除聯(lián)系人界面或者拉黑界面,如果是則模擬點擊"取消",讓它消失。
*
* @param rootNode
*/
private void DeleteFail(AccessibilityNodeInfo rootNode) {
if(rootNode!=null){
for (int i = 0; i < rootNode.getChildCount(); i++) {
AccessibilityNodeInfo node = rootNode.getChild(i);
//判斷是不是刪除聯(lián)系人彈出框
if("android.widget.TextView".equals(node.getClassName().toString())){
if(!TextUtils.isEmpty(node.getText())){
if(node.getText().toString().contains("將同時刪除與該聯(lián)系人的聊天記錄")){
isDeleteDialog=true;
}
}
}
//判斷是不是拉黑聯(lián)系人彈出框
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);
}
}
}
}
}
}
}
/**
* 必須重寫的方法:系統(tǒng)要中斷此service返回的響應時會調(diào)用。在整個生命周期會被調(diào)用多次。
*/
@Override
public void onInterrupt() {
Toast.makeText(this, "我快被終結(jié)了啊-----", 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, "服務已被關(guān)閉", Toast.LENGTH_SHORT).show();
return super.onUnbind(intent);
}
}
使用方法:
設置-輔助功能-無障礙-點擊WechatDeletefail開啟即可(或者在設置中查找輔助功能等)
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android UI動態(tài)設置帶有Stroke漸變色背景Drawable
這篇文章主要為大家介紹了Android UI動態(tài)設置帶有Stroke漸變色背景Drawable,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
Android實現(xiàn)在ServiceManager中加入自定義服務的方法詳解
這篇文章主要介紹了Android實現(xiàn)在ServiceManager中加入自定義服務的方法,結(jié)合實例形式分析了Android開發(fā)中ServiceManager自定義服務的相關(guān)創(chuàng)建與使用方法,需要的朋友可以參考下2017-08-08
Android編程實現(xiàn)根據(jù)經(jīng)緯度查詢地址并對獲取的json數(shù)據(jù)進行解析的方法
這篇文章主要介紹了Android編程實現(xiàn)根據(jù)經(jīng)緯度查詢地址并對獲取的json數(shù)據(jù)進行解析的方法,結(jié)合實例形式分析了Android的經(jīng)緯度地址解析與json格式數(shù)據(jù)操作相關(guān)技巧,需要的朋友可以參考下2017-02-02

