实现效果:

让微信永远弹不出那个删除的对话框不就相当于屏蔽掉该功能了吗?哈哈效果如图:

实现原理:

同样是利用AccessibilityService辅助服务,关于这个服务类还不了解的同学可以先看下我前两篇的博客,原理都一样:

http://www.cnblogs.com/cxk1995/p/6363574.html(抢红包)

http://www.cnblogs.com/cxk1995/p/6366273.html(监听微信聊天)

1.我们知道,其实微信每次删除联系人都会弹出此页面

2.如果你对AccessibilityService有过了解或者有看过我之前的两篇博客,你会知道,其实每次弹出这个框,都会触发AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED这个事件,所以我们只要在每次触发该事件的时候进行判断当前页面是不是处于删除联系人对话框,如果是,我们模拟点击取消按钮。思路什么的其实都很简单,可以直接看下代码:

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

使用方法:

设置-辅助功能-无障碍-点击WechatDeletefail开启即可(或者在设置中查找辅助功能等)

写在最后:

AccessibilityService服务类很好玩,如果你对他了解的话其实可以做很多事哈哈。

其实这只是一个小例子而已,例如你想让微信加不了好友或者发不了红包等等其实都跟上面的方法类似。

个人兴趣研究,不建议用在非法途径上!!

欢迎一起讨论学习:471497226@qq.com

Android实现屏蔽微信拉黑和删除联系人功能的更多相关文章

  1. [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子

    转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...

  2. 被「李笑来老师」拉黑之「JavaScript微博自动转发的脚本」

    故事的背景如下图,李笑来 老师于10月19日在 知乎Live 开设 一小时建立终生受用的阅读操作系统 的讲座,他老人家看到大家伙报名踊跃,便在微博上发起了一个 猜数量赢取iPhone7 的活动. 因为 ...

  3. Android之自定义控件-下拉刷新

    实现效果: 图片素材:         --> 首先, 写先下拉刷新时的刷新布局 pull_to_refresh.xml: <resources> <string name=& ...

  4. Android 支付宝以及微信支付快速接入流程

    简介 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成! 一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:ht ...

  5. cocos2d-x C++ (Android)集成第三方微信分享

    ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...

  6. Android ActionBar仿微信界面

    ActionBar仿微信界面 1.学习了别人的两篇关于ActionBar博客,在结合别人的文章来仿造一下微信的界面: 思路如下:1).利用ActionBar生成界面的头部,在用ActionBar的Ac ...

  7. 打造Android万能上拉下拉刷新框架--XRefreshView(三)

    转载请注明出处:http://blog.csdn.net/footballclub/ 打造Android万能上拉下拉刷新框架–XRefreshView(一) 打造Android万能上拉下拉刷新框架–X ...

  8. Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

    转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象 ...

  9. android中自定义下拉框(转)

    android自带的下拉框好用不?我觉得有时候好用,有时候难有,项目规定这样的效果,自带的控件实现不了,那么只有我们自己来老老实实滴写一个新的了,其实最基本的下拉框就像一些资料填写时,点击的时候出现在 ...

随机推荐

  1. dsp与dmp的cookie mapping

    dsp   ad.com   在  meijiu.com上部署广告. 假设dmp叫cm.api.taobao.com 建立gid映射表 (1) ad.com在meiju.com的页面上部署,指向dmp ...

  2. MySQL常用命令总结3

    id SMALLINT UNSIGNED [AUTO_INCREMENT] PRIMARY KEY, //把id定义为主键且自动排号,每张数据表只有一个主键,不能为NULL,确保记录唯一性 //省略a ...

  3. iOS调用另一个程序

    在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个 ...

  4. 使用Cookie记住用户名和密码

    Login.jsp <form name = "f1" method="get" action="servlet/LoginServlet&qu ...

  5. box2d中的物理世界

    box2d中的物理世界,即b2World类就是一个包含了各种物体(body,物理体,或者叫刚体),固定附着物(fixture,形状与物理体的绑定物)以及各种约束体(比如关节),并使其在当中完成各种交互 ...

  6. VS2010环境下使用VB编写串口助手

    1.在Form1的设计模式下添加以下控件: 2.添加好控件之后我们就可以打开Form1.vb进行编程了: '使用串口需要引用的命名空间 Imports System.IO.Ports Imports ...

  7. jsp分页的不同实现方法

    一.代码实现分页 定义四个分页变量 pageNow  表示第几页  该变量是由用户来决定的,因此是变化的 pageCount  表示总共有多少页,该变量是计算出来的,      ---考虑算法 pag ...

  8. 在DataGrid中实现Button Command

    Command="{Binding butCommand}"会默认查找ListViewItems中对象的属性,而你的ListViewItems中对象应该不包括butCommand属 ...

  9. UVa 10148 - Advertisement

    题目大意:有一些广告牌,为了使跑步者看到固定数量的广告,设计所需租用的最少数量的广告牌. 其实就是区间选点问题:数轴上有n个区间[ai, bi],取尽量少的点,使得每一个区间都至少有一个点.首先对区间 ...

  10. 样式(Style)和主题(Theme)资源——主题资源

    与样式资源非常相似,主题资源的XML文件通常也放在/res/values 目录下,主题资源的XML文档同样以<resources.../>元素作为根元素,同样使用<style.../ ...