編輯:關於Android編程
Android實現屏蔽微信拉黑和刪除聯系人功能,廢話不多說,具體如下:
實現效果:
讓微信永遠彈不出那個刪除的對話框不就相當於屏蔽掉該功能了嗎?哈哈效果如圖:
實現原理:
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. * 屏蔽微信"刪除聯系人"和"拉黑"功能 */ 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開啟即可(或者在設置中查找輔助功能等)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
CleverCode最近在做微信開發。在調試內網用手機調試微信公眾號開發的時候,發現訪問觸屏版配置host頁面非常麻煩。最好找到一個代理工具Fiddler。1 代理原理1
官方Wikihttp://www.cryptopp.com/wiki/Android_(Command_Line)這個移植比較簡單,官方直接就有文檔了,而且有現成的腳本。
小米筆記本Air已經發布,在配置上有兩個版本,一款是13寸的高配版和12寸的輕薄款,具體的配置我們來看看。小米筆記本配置小米筆記本Air采用全金屬超輕薄設計
其實Android 5.0中事件輸入子系統的框架和流程沒有本質變化。Service端的實現在/frameworks/native/services/inputflinge